这是后续这问题。我认为它有足够的不同,值得提出一个新问题。
据我了解,捕获组仅捕获文本,这意味着当(\ba\b)
仅保存匹配的字符串时a
,单词边界本身不包括在内,因为它们不是文本。
这让我相信该模式(\ba\b) \B\1\B
应该能够匹配a zaz
(毕竟第二次出现a
在两个非单词边界之间),但它不匹配。
我缺少什么?
答案1
您漏掉了 z 吗?
$ echo a zaz | grep -P '(\ba\b) \B\1\B'
- no output -
$ echo a zaz | grep -P '(\ba\b) z\B\1\Bz'
a zaz
就像\b
括号中不包含附加字符一样,\B
也不匹配附加字符。因此,正则表达式中没有任何内容可以匹配 a 周围的 z。