作者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/cn.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