我使用 perl --version
perl 5,版本 36,subversion 0(v5.36.0)为 i686-linux-gnu-thread-multi-64int 构建(带有 52 个注册补丁
我使用了以下测试线,结果如下:
perl -we '$_="ab"; $WE_retcod = $_ =~ m/(?<=a)b/; print "WE_retcod: Y" . $WE_retcod . "Y\n"; print "\&: Y" . $& . "Y\n";'
产量
返回代码为 1
匹配的是“b”
好的
perl -we '$_="ab"; $WE_retcod = $_ =~ m/(?<=c)b/; print "WE_retcod: Y" . $WE_retcod . "Y\n"; print "\&: Y" . $& . "Y\n";'
产量
返回代码为空
匹配未初始化
好的
perl -we '$_="ab"; $WE_retcod = $_ =~ m/(?(?<=a)b)/; print "WE_retcod: Y" . $WE_retcod . "Y\n"; print "\&: Y" . $& . "Y\n";'
产量
返回代码为 1
匹配为空
false:匹配应该为“b”
perl -we '$_="ab"; $WE_retcod = $_ =~ m/(?(?<=c)b)/; print "WE_retcod: Y" . $WE_retcod . "Y\n"; print "\&: Y" . $& . "Y\n";'
产量
返回代码为 1
匹配为空
false:返回代码应该为空
match 应该未初始化
我做错什么了?
问候
答案1
我假设您想要一个非捕获组,该组使用(?:)
第 3 和第 4 个示例中的整个表达式。如果是这样,则您的表达式中缺少冒号,因此以下几行是有效的。
perl -we '$_="ab"; $ret = $_ =~ m/(?:(?<=a)b)/; print "ret: Y" . $ret . "Y\n"; print "\&: Y" . $& . "Y\n";'
perl -we '$_="ab"; $ret = $_ =~ m/(?:(?<=c)b)/; print "ret: Y" . $ret . "Y\n"; print "\&: Y" . $& . "Y\n";' as intended.