看板 Perl 關於我們 聯絡資訊
感謝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
flu: 最後一個 \S* 把'.to'後的東西都吃下來了, 而且是greedy所以 05/30 03:09
flu: 愈多愈好,加上最後的[]可以不吃任何字所以前述 \S* 不用吐回 05/30 03:12
flu: 任何字就能讓整個pat成立。結果就是你看到的。 05/30 03:13
※ 編輯: jacky1989 (122.116.162.222), 05/30/2019 22:58:23