关于perl 正则的一个小问题 如何返回匹配的多个值 66分在线等

mysam 2006-10-27 09:23:50
那么要是我要匹配的变量中有好几个可以用我写的正则匹配的字符串,
怎样才能得到它到底匹配了几个结果,如何输出这几个匹配的字符串
比如
$string="rwcterytaaaaaarwcterytbbbbbbrwcteryt"; 有三个可以用下面正则匹配的字符串

$string=~m/(r\w{2}t\w{3}t)/;
如何得到正则表达式匹配的数目?
如何分别得到到底匹配了哪三个?
...全文
445 4 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
ZenInPalm 2006-12-02
  • 打赏
  • 举报
回复
首先,Perl正则表达式一定是从最左开始匹配,除非你用锚点指定从何处开始匹配,当然了,如果你觉得不放心,要看看究竟是匹配了什么,可以这样:

my $string="rwcterytaaaaaarwcterytbbbbbbrwcteryt";
$string=~m/a+(r\w{2}t\w{3}t)/;

print @-[1] . " -- " . @+[1];

#@-[1]指示了你的Group从何开始匹配
#@+[1]指示了匹配在何处结束
#如果你想看看整个正则表达式从何开始,在何处结束,只要用@-[0]和@+[0]替换即可

第二,你没有说太明白,你只有一个group,当然只可能匹配一个结果了,不过我想这不是你本意,请再说清楚些,我才好帮你解决
tyyua_21 2006-11-27
  • 打赏
  • 举报
回复
$string="rwcterytaaaaaarwcterytbbbbbbrwcteryt";
@match=$string=~/r\w{2,3}t/g;
print "@match\n";
iambic 2006-10-27
  • 打赏
  • 举报
回复
唉,现在人越来越多了,我也越来越忙了,没多少时间灌水,沙发都抢不到了。
还是支持下楼上。当字符串很长,需要匹配的东西比较复杂,每个匹配都需要额外处理的时候,使用第二种方法会比较方便。
godknow11 2006-10-27
  • 打赏
  • 举报
回复
@matches = "balata" =~ /.a/g; # now @matches = ("ba", "la", "ta")
或者
while ("balata" =~ /.a/g) {
$match = $&;
print ("$matchn");
}
相关推荐
发帖
脚本语言

3.7w+

社区成员

JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • ITBOB • 鲍勃
加入社区
帖子事件
创建了帖子
2006-10-27 09:23