带有(条件)的 perl 扩展正则表达式模式行为错误,我该怎么做?

带有(条件)的 perl 扩展正则表达式模式行为错误,我该怎么做?

我使用 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.  

相关内容