Re: [問題] 關於regular expression

看板Perl作者 (愚人)時間17年前 (2007/10/07 20:02), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串6/6 (看更多)
※ 引述《willhunting (這些年來)》之銘言: : 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來寫比較好呢? : 謝謝!! 應該不需要那麼多規則啊 @"@ @exclude = (); @include = (); @regex = ('(!?)"([^"]*?)"', '(!?)(\w+)'); $_ = $search_key; while(1){ $ex = 0; foreach $regex (@regex){ $ex |= s/$regex//; if($1 eq '!') { push(@exclude, $2);} else { push(@include, $2);} } last if($ex == 0); } ========================================== 就只是有 ! 的表示不要的 和有"的表示一個完整的詞而已。 regex 所以只有二組規則嚕。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.231.49.182
文章代碼(AID): #172ChHTD (Perl)
文章代碼(AID): #172ChHTD (Perl)