推 david220:4. /^!"(\S+\s*)+"/ S前少一個\ 10/04 09:03
→ willhunting:喔 抱歉 我是在這裡沒打上 我程式裡還是有\的 10/04 09:31
推 Andor:2也沒問題嗎? 4--> /^!"((\S+\s*)+)"/ 10/04 09:42
※ 編輯: willhunting 來自: 160.39.247.23 (10/04 10:02)
※ 編輯: willhunting 來自: 160.39.247.23 (10/04 10:02)
推 willhunting:A兄 4我照這樣打也還是不行 說不定是我其他規則定的 10/04 10:05
→ willhunting:有ambiguous的狀況 想請教2的問題可能是哪裡呢? 10/04 10:06
推 badwork:regexp已經開版囉,大家可以移過去討論~~ 10/04 17:45
--
派特.萊利說道 : "他仍然是米高.佐丹(Michael Jordan)"
2001. Oct
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 160.39.59.116
> -------------------------------------------------------------------------- <
作者: adrianshum (Alien) 看板: RegExp
標題: Re: [問題] 關於regular expression
時間: Fri Oct 5 18:10:41 2007
※ 引述《willhunting (這些年來)》之銘言:
: ※ [本文轉錄自 perl 看板]
: 作者: willhunting (這些年來) 看板: perl
: 標題: [問題] 關於regular expression
: 時間: Thu Oct 4 04:26:21 2007
: Hi!各位先進,我是perl的新手,現在在處理字串上遇到了一點麻煩想來
: 這裡跟各位討教。是這樣的,我目前要對使用者輸入的搜尋字串作一些
: 判別,規則是這樣的:
: 1. cat : 使用者要找cat這個字
: 2. "cat dog" : 使用者要找cat dog,一定要連在一起
: 3. !pig : 使用者要找不含pig的
: 4. !"pig duck" : 使用者要找不含連在一起的"pig duck"
: 因為上述所有組合可能在一個command裡面包含,所以我要個別進行判別
: 再作處理,所以我對四種狀況的判讀是這樣寫的
: 1. /^[^!]\S+/
: 2. /^"(\S+\s*)+"$/
: 3. /^![^"]\S+/
: 4. /^!"(\S+\s*)+"/ <= 出問題了
: 1-3都沒有問題,但第4個,也就是處理!"pig duck"這樣子的情況時,如果中間
: 有空格,perl會以規則1去抓出duck"來,但如果中間不放空格,也就是如果把
: 輸入改成!"pigduck"的話就沒問題,請問該用什麼樣的regex來寫比較好呢?
: 謝謝!!
不熟 Perl
你的意思是想靠 regex 來判定究竟輸入的格式
是四種中的哪一種是嗎?
但如果你輸入 !"pig duck", 理應不會 match 第一
個 regex 呀, 因為 start of line 後面就是 ! 了
另, 第四個有需要那麼複雜嘛? 反正是
以 ! 開頭, 然後 " , 然後至少一個 non-space char, 再 "
那麼
/^!"\S.*"$
不就好了?
Alien
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 202.22.246.26
※ 編輯: adrianshum 來自: 202.22.246.26 (10/05 18:11)
> -------------------------------------------------------------------------- <
作者: qrtt1 (愚人) 看板: RegExp
標題: Re: [問題] 關於regular expression
時間: Sun Oct 7 20:05:29 2007
@regex = ('(!?)"([^"]*?)"', '(!?)(\w+)');
就只是有 ! 的表示不要的
和有"的表示一個完整的詞而已。
regex 所以只有二組規則嚕。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.231.49.182
> -------------------------------------------------------------------------- <
作者: cutecpu (可愛中央處理器) 看板: RegExp
標題: Re: [問題] 關於regular expression
時間: Mon Oct 8 12:48:57 2007
※ 引述《qrtt1 (愚人)》之銘言:
: @regex = ('(!?)"([^"]*?)"', '(!?)(\w+)');
~這個問號加不加差在哪裡?謝謝^^
: 就只是有 ! 的表示不要的
: 和有"的表示一個完整的詞而已。
: regex 所以只有二組規則嚕。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.122.184.70
> -------------------------------------------------------------------------- <
作者: MichaelHsin (BBS之蟲) 看板: RegExp
標題: Re: [問題] 關於regular expression
時間: Mon Oct 8 15:05:13 2007
※ 引述《cutecpu (可愛中央處理器)》之銘言:
: ※ 引述《qrtt1 (愚人)》之銘言:
: : @regex = ('(!?)"([^"]*?)"', '(!?)(\w+)');
: ~這個問號加不加差在哪裡?謝謝^^
: : 就只是有 ! 的表示不要的
: : 和有"的表示一個完整的詞而已。
: : regex 所以只有二組規則嚕。
一般的 quantifier (*, +, {n}, {n,}, {n,m}) 會 match 最長字串,
而在 quantifier 後面接 ? 是叫它 match 最短字串。
例如 "blahblahblah":
/b.*a/ -> "blahblahbla"
/b.*?a/ -> "bla"
--
「為什麼會有兩張鬼牌?」
『每次都讓它當鬼不是很可憐嗎?所以剩下的一張就是今天的鬼。
人類要是也能像這樣輕鬆配對,就省事了。
有時候8喜歡10,有時候K黏著2,有時候是黑桃同志糾纏不清。』
「你換掉鬼牌,就是在想這些麻煩事嗎?」
-- 安達充 《H2》
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.55
> -------------------------------------------------------------------------- <
作者: LiloHuang (相見不如懷念) 看板: RegExp
標題: Re: [問題] 關於regular expression
時間: Thu Oct 11 00:00:40 2007
※ 引述《cutecpu (可愛中央處理器)》之銘言:
: 1./b[^a].*a/
: 2./b[^a].*?a/
: 上面兩個的definition power應該一樣吧?
: 反正上面兩個碰到第一個a就會match最後結尾的紅a了
: 不知道這樣有理解有錯嗎??
#!/usr/bin/perl
$str = "blahblahblah";
print $1,$/ if($str =~ /(b[^a].*a)/);
print $1,$/ if($str =~ /(b[^a].*?a)/);
這是為了避免 Greedy 比對
可參考 http://www.unix.org.ua/orelly/perl/cookbook/ch06_16.htm
--
莉洛 - 空房間的秘密
http://blog.roodo.com/kenwu/
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.216.216.27
推 cutecpu:推 10/11 00:30
> -------------------------------------------------------------------------- <
作者: MichaelHsin (BBS之蟲) 看板: RegExp
標題: Re: [問題] 關於regular expression
時間: Thu Oct 11 00:12:41 2007
※ 引述《cutecpu (可愛中央處理器)》之銘言:
: ※ 引述《MichaelHsin (BBS之蟲)》之銘言:
: : 一般的 quantifier (*, +, {n}, {n,}, {n,m}) 會 match 最長字串,
: : 而在 quantifier 後面接 ? 是叫它 match 最短字串。
: : 例如 "blahblahblah":
: : /b.*a/ -> "blahblahbla"
: : /b.*?a/ -> "bla"
: 如果寫成
: 1./b[^a].*a/
blahblahbla
: 2./b[^a].*?a/
bla
: 上面兩個的definition power應該一樣吧?
: 反正上面兩個碰到第一個a就會match最後結尾的紅a了
: 不知道這樣有理解有錯嗎??
quantifier 後面的問號只是讓這個 quantifier 改 match 最短字串。
/b[^a].*a/ 的 .* 會 match ahblahbl
/b[^a].*?a/ 的 .*? 會 match 空字串
--
芸曰:「今世不能,期以來世。」
余曰:「來世卿當作男,我為女子相從。」
芸曰:「必得不昧今生,方覺有情趣。」
余笑曰:「幼時一粥猶談不了;若來世不昧今世,合巹之夕,細談隔世,更無合
眼時矣。」
-- 沈復 《浮生六記》
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.55
※ 編輯: MichaelHsin 來自: 140.112.30.55 (10/11 00:12)
→ cutecpu:推 10/11 00:30
> -------------------------------------------------------------------------- <
作者: bcse (Lvx ex Caelis) 看板: RegExp
標題: Re: [問題] 關於regular expression
時間: Tue Nov 20 12:56:43 2007
※ 引述《MichaelHsin (BBS之蟲)》之銘言:
: ※ 引述《cutecpu (可愛中央處理器)》之銘言:
: : ~這個問號加不加差在哪裡?謝謝^^
: 一般的 quantifier (*, +, {n}, {n,}, {n,m}) 會 match 最長字串,
: 而在 quantifier 後面接 ? 是叫它 match 最短字串。
: 例如 "blahblahblah":
: /b.*a/ -> "blahblahbla"
: /b.*?a/ -> "bla"
請問一下,如果我想要取 bla 的話,下面兩種寫法哪一種比較好?
1. /b.*?a/
2. /b[^a]*a/
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 134.208.33.185
→ bcse:自己測了一下效率發現似乎沒有什麼差別 XD 11/20 13:04
推 LiloHuang:一般來講後者比較好 11/20 19:09
推 bcse:謝謝回答 :) 11/20 21:22