[問題] 正規表示式擷取疑問

看板Perl作者時間5年前 (2019/05/30 01:31), 5年前編輯推噓0(003)
留言3則, 1人參與, 5年前最新討論串1/1
感謝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://www.ptt.cc/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

05/30 03:09, 5年前 , 1F
最後一個 \S* 把'.to'後的東西都吃下來了, 而且是greedy所以
05/30 03:09, 1F

05/30 03:12, 5年前 , 2F
愈多愈好,加上最後的[]可以不吃任何字所以前述 \S* 不用吐回
05/30 03:12, 2F

05/30 03:13, 5年前 , 3F
任何字就能讓整個pat成立。結果就是你看到的。
05/30 03:13, 3F
※ 編輯: jacky1989 (122.116.162.222), 05/30/2019 22:58:23
文章代碼(AID): #1Sxi7yvV (Perl)