Perl负向零宽断言变量长度错误

5
这个正则表达式可以成功匹配模式“ab_”,但前面不能有单引号或美元符号:

当不以单引号或美元符号为前缀时,这个正则表达式可以很好地匹配模式“ab_”:

/(?<!('|\$))ab_/

但是如果我尝试在单引号前面添加括号

/(?<!(\['|\$))ab_/

我收到了这个错误。
Variable length lookbehind not implemented in regex;

这个错误是什么意思?有没有办法让第二个例子运行起来?由于我不是专家,很可能忽略了一些基础知识,请指出是否有遗漏的部分。
1个回答

7
这个错误意味着在 Perl 中,回顾断言必须有一个固定长度的模式。因为模式只匹配长度为1的子字符串,所以('|\$)是可以的,但是(\['|\$)可以匹配长度为1($)或长度为2([')的子字符串。

在你的情况下,你可以通过使用两个单独的回顾断言来修复此问题,每个断言都有一个固定长度的模式,一个用于排除你想要排除的每种情况:

/(?<!\[')(?<!\$)ab_/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接