对于表达式(?<!foo)
,Negative Lookbehind,断言紧接在字符串中当前位置之前的内容不是foo。
现在匹配不以字符abc
结尾的字符串。
正式表达式为\w+(?<!abc)\b
或\b\w+(?<!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.表达\w+\b(?<!abc)
是负面的看法吗?
2.为什么\w+\b(?<!abc)
与\w+(?<!abc)\b
具有相同的效果?
答案 0 :(得分:1)
1)这是一个负面的回顾窗口。如果你想匹配不是由其他东西进行的东西,则使用负回顾。
?<!abc
是一个否定回顾窗口。因此,只有前进的令牌不&#34; abc&#34;对于提供的字符串,这是正确的:"xxabc jkl"
从技术上讲,空格正在进行"jkl"
因此它匹配。
2)\b
寻找单词边界。字边界适用于两个正则表达式中存在的空格和字符串结尾。如果您真的想看到差异,请尝试从输入中取出空间。所以
使用"xxabcjkl"