Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 可变长度查找在perl文件中不起作用,但在一行程序中起作用_Regex_Perl_Regex Lookarounds_Lookbehind - Fatal编程技术网

Regex 可变长度查找在perl文件中不起作用,但在一行程序中起作用

Regex 可变长度查找在perl文件中不起作用,但在一行程序中起作用,regex,perl,regex-lookarounds,lookbehind,Regex,Perl,Regex Lookarounds,Lookbehind,如果我将s/(?)放入一个perl文件中,并尝试运行它,它将发出警告:可变长度查找在regex中是实验性的;标记为并失败 但是,如果放入一个perl one liner,它将成功运行,尽管仍有人警告说,可变长度查找在regex中是实验性的;标记为 是当前的设计还是我用错了 更新:在v5.30之前,我使用的是perl 5.31.3,带有不确定“可变宽度”模式的正向查找无法编译,并且未实现可变长度查找错误 在v5.30中,您需要使用最多可匹配255个字符的查找模式。 使用lookback断言(如(?

如果我将
s/(?)放入一个perl文件中,并尝试运行它,它将发出警告:
可变长度查找在regex中是实验性的;标记为
并失败

但是,如果放入一个perl one liner,它将成功运行,尽管仍有人警告说,
可变长度查找在regex中是实验性的;标记为

是当前的设计还是我用错了


更新:在v5.30之前,我使用的是perl 5.31.3,带有不确定“可变宽度”模式的正向查找无法编译,并且未实现
可变长度查找
错误

在v5.30中,您需要使用最多可匹配255个字符的查找模式。

使用lookback断言(如
(?实验::vlb
警告类别 是为了提醒您,精确的行为可能会发生变化 根据现场使用的反馈


如果您使用
(?Perl不关心代码是通过
-e
还是通过文件提供的。在这两种情况下,代码的行为是相同的。失败的原因不是因为您使用了发布在文件中而不是命令行上的代码。还有一个您尚未识别的差异导致了行为上的差异


也就是说,您不应该使用您发布的成本。正如警告所大声宣布的,这是一个实验性功能。它未经验证,因此可能存在问题。此外,它可能会更改和删除,恕不另行通知

您可以使用以下替代方法来消除实验性可变长度查找的使用:

s/(?:href | src)。{0,40}(*跳过)(*失败)| jpg//g

(*FAIL)
导致模式不匹配,从而触发回溯。但是
(*SKIP)
使其在与
(?:href | src)匹配的字符串后的位置开始匹配。{0,40}
在以后的尝试中。

该消息是一个警告,它实际上不应该导致任何失败。或者您在脚本中启用了致命警告,或者问题实际上存在于其他地方。我确实启用了致命警告。在我将其更改为
使用警告;
或者正如Wiktor Stribiżew指出的那样,添加一个
无警告qw(实验:vlb);
,它可以成功运行。警告是,作为实验功能,它可能有bug,可能会在不通知的情况下更改,也可能会在不通知的情况下删除。