抽取不以abc结尾的字符串

抽取不以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)' 为何有这样的结果?

阅读 7.6k
1 个回答

不以abc结尾这个条件显然是一个负向零宽断言,因此采用正则\w+(?<!abc)\b

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进