对于表达式(?<!foo)
,否定外观,断言紧挨着字符串中当前位置之前的内容不是foo。
现在匹配不以字符结尾的字符串abc
.
形式表达式是w+(?<!abc)b
或bw+(?<!abc)b
。
echo "xxabc jkl" | grep -oP 'w+(?<!abc)b'
jkl
让我们尝试另一种形式:w+b(?<!abc)
。
echo "xxabc jkl" | grep -oP 'w+b(?<!abc)'
jkl
它也得到正确答案。
在我看来,w+b(?<!abc)
不是负面的背后,没有(?<!abc)
的背后,它不能称为负面的背后。
1.Is 表情w+b(?<!abc)
消极的回望?
2.为什么w+b(?<!abc)
和w+(?<!abc)b
有相同的效率?
1(这是一个负面的回溯窗口。如果要匹配未由其他内容进行的内容,则使用负面回溯。?<!abc
是一个负面的回望窗口。因此,仅当正在进行的标记不是"abc"时才为真,而提供的字符串也是如此:"xxabc jkl"
技术上,空格正在进行"jkl"
因此它匹配。
2(b
寻找单词边界。单词边界适用于两个正则表达式中存在的空格和字符串结尾。如果您真的想看到差异,请尝试从输入中取出空间。所以 使用"xxabcjkl"