【发布时间】:2017-08-12 05:17:19
【问题描述】:
对于表达式 (?<!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) 不是 Negative Lookbehind,(?<!abc) 后面没有任何东西,它不能称为 Negative Lookbehind。
1. 表达式\w+\b(?<!abc) 是否定的Lookbehind 吗?
2.为什么\w+\b(?<!abc)和\w+(?<!abc)\b效果一样?
【问题讨论】:
-
请记住,
\b是一个零宽度匹配 - 无论它出现在之前还是之后,都将在字符串中的完全相同的点检查后向匹配.