我希望这个简单的文本字符串不会被视为匹配:
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/