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

作者: l10nel (小失)   2012-08-01 17:11:33
※ 引述《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 開頭,則略過。
這是你要的嗎?如果不是,可設法自行修改。
作者: rkcity (喵。罐頭)   2012-08-01 17:24:00
謝謝L大, 我想要的是只要數值不是512或556就印出來也就是說 即使像是512768 556334也必須印出可是我怎麼改都會變成 前面只要是512或556 就印不出來 Q_Q
作者: l10nel (小失)   2012-08-01 17:26:00
那更簡單,去掉 (?:512|556) 就成了秘訣在那個$符號,不能省,否則前面只要512或556就失敗
作者: blackkaku (black)   2012-08-01 18:49:00
-size (?!(512|556)$)
作者: rkcity (喵。罐頭)   2012-08-01 19:35:00
-size (?!(?:512|556)$)(.+)$ 這樣不行耶..http://regexr.com?31mu3-size (?!(512|556)$) 這樣的話 都會matchhttp://regexr.com?31mu6阿!! 我試出來了!!-size (?!(?:512|556)\b)(.+)可以用$1提取後面數字的部份 並且他不是512或556雖然有點暈頭轉向的 但還是要感謝前輩指點!後面放\b跟放$ 結果卻截然不同@@"
作者: blackkaku (black)   2012-08-01 19:48:00
真奇怪 我的環境下是ok的耶
作者: rkcity (喵。罐頭)   2012-08-01 19:49:00
咦.. 我是用上面那個線上檢測RegExp工具 所以....|||
作者: blackkaku (black)   2012-08-01 20:09:00
試了一下 要勾multiline才行。
作者: rkcity (喵。罐頭)   2012-08-01 20:15:00
原來如此 ._.!! 謝謝^^
作者: godspeedlee (妳,我可以)   2012-08-01 22:47:00
$是指string end,\b是單字分隔,當然結果不一樣

Links booklink

Contact Us: admin [ a t ] ucptt.com