Re: [問題] 請問例外的寫法

看板RegExp作者 (小失)時間11年前 (2012/08/01 17:11), 編輯推噓7(7013)
留言20則, 4人參與, 最新討論串4/4 (看更多)
※ 引述《rkcity (喵。罐頭)》之銘言: : 借題詢問一下各位前輩.. : http://regexr.com?31mr3 : - - - - - - - - : Context : - - - - - - - - : -size 512 : -size 556 : -size 512556 : -size 556556 : -size 768 : -size 512768 : -size 556768 : - - - - - - - - : - - - - - - - - : RegExp : - - - - - - - - : -size (?!512|556) : - - - - - - - - : 這樣子可以抓出 768 前的 -size : 可是如果我想要抓的是 不是512和556 : 也就是會包含512556 556556 512768 556768等雖是512 556開頭 : 但整體數字不是512和556的話 : 應該要怎麼改呢? : 另外,如果我想要順便抓出後面這個數值的話 : (?!512|556)因為是不包含其結果 所以沒辦法用$1取得 >"< : 感謝各位前輩 m(_ _)m use strict; my @a = ("-size 512", "-size 556", "-size 512556", "-size 556556", "-size 512768", "-size 556768", "-size 333555"); for my $i (@a) { if ($i =~ m/-size (?!(?:512|556)$)(?:512|556)(.+)$/) { print "Matched: " . $1 . "\n"; } } 结果: Matched: 556 Matched: 556 Matched: 768 Matched: 768 說明:找出 512 或 556 後面的數字,但如果數字僅是 512 或 556,或不以 512 或 556 開頭,則略過。 這是你要的嗎?如果不是,可設法自行修改。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 76.198.133.1

08/01 17:24, , 1F
謝謝L大, 我想要的是只要數值不是512或556就印出來
08/01 17:24, 1F

08/01 17:25, , 2F
也就是說 即使像是512768 556334也必須印出
08/01 17:25, 2F

08/01 17:26, , 3F
可是我怎麼改都會變成 前面只要是512或556 就印不出來 Q_Q
08/01 17:26, 3F

08/01 17:26, , 4F
那更簡單,去掉 (?:512|556) 就成了
08/01 17:26, 4F

08/01 17:28, , 5F
秘訣在那個$符號,不能省,否則前面只要512或556就失敗
08/01 17:28, 5F

08/01 18:49, , 6F
-size (?!(512|556)$)
08/01 18:49, 6F

08/01 19:35, , 7F
-size (?!(?:512|556)$)(.+)$ 這樣不行耶..
08/01 19:35, 7F

08/01 19:35, , 8F

08/01 19:36, , 9F
-size (?!(512|556)$) 這樣的話 都會match
08/01 19:36, 9F

08/01 19:36, , 10F
08/01 19:36, 10F

08/01 19:43, , 11F
阿!! 我試出來了!!
08/01 19:43, 11F

08/01 19:43, , 12F
-size (?!(?:512|556)\b)(.+)
08/01 19:43, 12F

08/01 19:43, , 13F
可以用$1提取後面數字的部份 並且他不是512或556
08/01 19:43, 13F

08/01 19:44, , 14F
雖然有點暈頭轉向的 但還是要感謝前輩指點!
08/01 19:44, 14F

08/01 19:45, , 15F
後面放\b跟放$ 結果卻截然不同@@"
08/01 19:45, 15F

08/01 19:48, , 16F
真奇怪 我的環境下是ok的耶
08/01 19:48, 16F

08/01 19:49, , 17F
咦.. 我是用上面那個線上檢測RegExp工具 所以....|||
08/01 19:49, 17F

08/01 20:09, , 18F
試了一下 要勾multiline才行。
08/01 20:09, 18F

08/01 20:15, , 19F
原來如此 ._.!! 謝謝^^
08/01 20:15, 19F

08/01 22:47, , 20F
$是指string end,\b是單字分隔,當然結果不一樣
08/01 22:47, 20F
文章代碼(AID): #1G6FB8mN (RegExp)
文章代碼(AID): #1G6FB8mN (RegExp)