抽取不以abc结尾的字符串
我想到了三种表达式
1.\w+\b(?<!abc)
2.\w+(?<!abc)\b
3.\w+(?<!abc\b)
前两种表达式都得到了结果。
我总认为w+(?<!abc)b 是最符合定义的, 否定的,向后的环视,w+(?<!abc)后面有个 b
debian@wifi:~$ echo 'xyabc aaabc xxabcd' |grep -oP '\w+\b(?<!abc)'
xxabcd
debian@wifi:~$ echo 'xyabc aaabc xxabcd' |grep -oP '\w+(?<!abc)\b'
xxabcd
为何w+b(?<!abc) 也有结果?
两种表达有何区别?请分别介绍一下,他们是如何执行的?
第三种表达式
echo 'xyabc aaabc xxabcd' |grep -oP '\w+(?<!abc\b)'
xyab
c
aaab
c
xxabcd
'w+(?<!abcb)' 为何有这样的结果?
不以abc结尾这个条件显然是一个
负向零宽断言
,因此采用正则\w+(?<!abc)\b