我预计
egrep -i "((\w)\2){4,}" /usr/share/dict/words
匹配单词“subbookkeeper”,但它不匹配。
想法?
显然 egrep 不支持{m,n}
重复语法:
$ egrep -i '((\w)\2)((\w)\4)((\w)\6)' words
bookkeeper
bookkeeping
subbookkeeper
$ egrep -i '((\w)\2)((\w)\4)((\w)\6)((\w)\8)' words
subbookkeeper
如果你拼出这些组,它会起作用。
这是在我的 Mac 上。
问题似乎是 egrep 没有在重复时重置捕获的组。不确定这是一个错误还是符号所暗示的模棱两可。如果您手动重复,那么它应该可以工作:
egrep -i "(\w)\1(\w)\2(\w)\3(\w)\4" /usr/share/dict/words
然而,奇怪的是这不起作用。这在 perl 中确实有效:
perl -lne "print if /((\w)\2){3}/" /usr/share/dict/words
顺便说一句, egrep 确实支持 {m,n} 语法。这证明:
egrep -i "a{2}" /usr/share/dict/words
Your regex is correct and there is not a bug. /usr/share/dict/words
does not contain the word "subbookkeeper".
在我的 freebsd 系统上,它确实找到了匹配项
[vaibhavc@freebsd-vai ~]$ cat acb
subbookkeeper
[vaibhavc@freebsd-vai ~]$ egrep "((\w)\2){4,}" -i acb
subbookkeeper