可变长度后视不适用于Perl文件,但适用于一行程序 [英] Variable-Length Lookbehind not work in perl file, but work in one-liner

查看:0
本文介绍了可变长度后视不适用于Perl文件,但适用于一行程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我将s/(?<!(?:href|src)=.{0,40})jpg//g放在Perl文件中,并尝试运行它,它将给出警告:Variable length lookbehind is experimental in regex; marked by并失败。

但如果放在Perl一行程序中,它将成功运行,但仍会受到Variable length lookbehind is experimental in regex; marked by的警告。

是按当前设计还是我用错了?

更新:我使用的是Perl 5.31.3

推荐答案

v5.30之前,具有不确定、可变宽度&q;模式的正向回溯无法编译,并出现Variable length lookbehind not implemented错误。

在v5.30中,您are allowed使用最多可以匹配255个字符的回溯模式。

使用回溯断言(如(?<=foo?)(?<!ba{1,9}r) 以前会生成错误并拒绝编译。现在它 编译(如果最大回溯不超过255个字符),但 在新的experimental::vlb警告类别中引发警告。这 是要提醒你,准确的行为可能会根据 关于现场使用的反馈。

如果使用(?<=WORDs+),您将收到Lookbehind longer than 255 not implemented错误,因为正则表达式引擎需要预先知道子模式的长度不会超过255,并且+量词的长度不确定。因此,(?<=WORDs{0,255})将起作用。

在您的情况下,您知道您的回溯模式永远不会匹配超过255个字符,因此只需像任何其他实验警告一样将该实验警告改为:

no warnings qw(experimental::vlb);

注意:请确保将上一行放在use warnings;行(如果存在)之后,否则它将不会有持久影响,将被use warnings;覆盖。

这篇关于可变长度后视不适用于Perl文件,但适用于一行程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆