【Perl】字符串匹配:如何正确匹配出’aaaa'中的3个‘aa'模式?

一段Perl的代码,输出结果为2。然而显然在字符串'aaaa'中含有3个'aa'模式。请问如何做到3次匹配?

#!/usr/bin/perl
$a = 'aaaa';
$i ++ while $a =~ /aa/g;
print $i;
阅读 7.6k
2 个回答
perl#!/usr/bin/perl
$a = 'aaaa';
$i ++ while $a =~ /a(?=a)/g;
print $i;

正则本质是状态机一个个consume字符扭转状态,捕获成功第一个aa以后相当于前两个字符都被consume掉从第三个a开始匹配了,所以原来的结果是2,这里用零宽断言让正则去look ahead匹配模式里第二个a而不将其consume掉,从而得到3

编译原理学得不好,解释得有点乱……


图形的力量,感觉比字清楚多了

图片描述

新手上路,请多包涵

在perl实例精解中正向前查找里面有这样的解释,你使用的这种方法是一次性匹配两个a,造成aa,aa,分开匹配,向前查找是一次性匹配一个

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏