作者jacky1989 ()
看板Perl
標題[問題] 正規表示式擷取疑問
時間Thu May 30 01:31:36 2019
感謝P友的大力協助
將第二個括號改成\w即可
------------------------------------------------------------
大家好,我在工作上使用perl遇到一些問題想請教大家該怎麼處理好
$str="Hello.I.am.Apple.nice.to.meet.you";
if($str=~/Hello\.(\S*)\.Apple\S*to\.(\S*)[\.you]*/){
$sub_str1=$1;
$sub_str2=$2;
}
print "$sub_str2\n";
原本預期應該要抓到meet,但是正規表示式卻抓到meet.you
code為什麼這樣寫,因為要處理的字串有時候可能不含you這個字
為什麼不使用split?因為抓的字串中間可能含有".",而且到底要包含多少個"."
則視狀況而定,有可能這次抓I.am,下次有可能抓I.am.Apple
所以我認為用split在這邊不適用
礙於公司有規定工作上任何東西都不能外洩,所以我只能用簡單例子來詢問
再麻煩高手幫我了,在此先謝上
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.116.162.222
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Perl/M.1559151100.A.E5F.html
※ 編輯: jacky1989 (122.116.162.222), 05/30/2019 01:34:12
※ 編輯: jacky1989 (122.116.162.222), 05/30/2019 01:36:45
1F:→ flu: 最後一個 \S* 把'.to'後的東西都吃下來了, 而且是greedy所以 05/30 03:09
2F:→ flu: 愈多愈好,加上最後的[]可以不吃任何字所以前述 \S* 不用吐回 05/30 03:12
3F:→ flu: 任何字就能讓整個pat成立。結果就是你看到的。 05/30 03:13
※ 編輯: jacky1989 (122.116.162.222), 05/30/2019 22:58:23