首页 新闻 会员 周边 捐助

perl正则匹配加g参数,会死循环

0
[已解决问题] 解决于 2025-07-25 10:37

while($name =~ /erw/){
print $&
}
这种没有加g参数,会死循环,一直打印erw,perl

_java_python的主页 _java_python | 小虾三级 | 园豆:996
提问于:2025-07-25 10:35
< >
分享
最佳答案
0

$name =~ /erw/ 在标量上下文里 只进行一次匹配,而且 不会改变字符串内容。
每次循环条件都会重新执行同样的匹配,结果永远为真,于是 $& 永远是 "erw",循环永不结束。

不带 g/erw/
每次匹配都重新从字符串头开始,而且永远只找第一次出现的位置。
如果字符串本身不变,结果永远为真 → 死循环。

带 g/erw/g
会启动 “全局匹配游标”(pos 指针)。
第一次匹配成功后,游标停在匹配末尾。
下一次再遇到 /erw/g,引擎从游标处继续往后找。
当再也找不到时,返回假,并把游标重置到字符串开头(但本次循环已结束,while 条件为假退出)。
因此 while (/.../g) 会 依次扫完整串后自然退出。

死循环:每次都从 0 开始找

while ($s =~ /erw/) { ... }

正常扫描:游标逐步后移,扫完即退出

while ($s =~ /erw/g) { ... }

_java_python | 小虾三级 |园豆:996 | 2025-07-25 10:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册