负面Lookbehind表达式不以exp结尾:&#39; \ w +(?<! - exp)\ b'或'\ w + \ b(?<!exp)'

时间:2017-08-12 05:17:19

标签: regex negative-lookbehind

对于表达式(?<!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具有相同的效果?

1 个答案:

答案 0 :(得分:1)

1)这是一个负面的回顾窗口。如果你想匹配不是由其他东西进行的东西,则使用负回顾。 ?<!abc是一个否定回顾窗口。因此,只有前进的令牌&#34; abc&#34;对于提供的字符串,这是正确的:"xxabc jkl"从技术上讲,空格正在进行"jkl"因此它匹配。

2)\b寻找单词边界。字边界适用于两个正则表达式中存在的空格和字符串结尾。如果您真的想看到差异,请尝试从输入中取出空间。所以  使用"xxabcjkl"