regex - 为什么这种否定的后视被认为是成功的正则表达式匹配?

标签 regex perl negative-lookbehind

我希望这个简单的文本字符串不会被视为匹配:

xyz@xyz:~$ echo xy | perl -n -e 'print if /y(?<!x)/'
xy

但奇怪的是它是。我也试过了@https://regex101.com/结果是一样的。似乎它会匹配 y ,这让我很困惑。如果我的理解是正确的,上面的正则表达式应该只匹配 y前面没有 x 的 s .

PS:我举了一个简单的例子。一般来说,我想使用负后视来匹配完整的字符串,而不是像 x 这样的单个字符。

我正在使用 Perl 正则表达式。

谢谢

最佳答案

ab意味着 a其次是 b .因此,您正在检查 y在一个位置,然后检查下一个位置之前没有 x .
它前面没有 x ——前面是y - 所以模式匹配。

你要

/(?<!x)y/

或者
/(?:^|[^x])y/

关于regex - 为什么这种否定的后视被认为是成功的正则表达式匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43860510/

相关文章:

javascript - 根据另一个数组中的条目拆分数组

regex - Zend Route Regex 和可选参数

regex - 正则表达式,不允许两个连续的特殊字符

regex - 中间带有可变字符的负向后视正则表达式 (PERL)

python - 结合负前瞻和后正则表达式

java - 当围绕空格 (\s+) 进行分割时,第一个结果字符串的第一个索引有一个空的第 0 个字符

java - 有没有办法用 Perl 连接到 Rational Team Concert?

apache - 为什么我在使用此 Perl CGI 脚本时收到 "permission denied"错误?

perl - 为什么安装 perl-5.12.2 时 perlbrew 失败?

python - 相当于断言正则表达式 Python 中否定查找中的 (.*)