关于正则表达式 '(\ba\b) \B\1\B'

关于正则表达式 '(\ba\b) \B\1\B'

这是后续问题。我认为它有足够的不同,值得提出一个新问题。

据我了解,捕获组仅捕获文本,这意味着当(\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。

相关内容