我希望
egrep -i "((\w)\2){4,}" /usr/share/dict/words
匹配“subbookkeeper”这个词,但它没有。
思想?
答案 0 :(得分:3)
显然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上。
答案 1 :(得分:2)
问题似乎是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
BTW,egrep确实支持{m,n}语法。这证明了:
egrep -i "a{2}" /usr/share/dict/words
答案 2 :(得分:0)
你的正则表达式是正确的,没有错误。 /usr/share/dict/words
不包含“subbookkeeper”一词。
答案 3 :(得分:0)
在我的freebsd系统上,它确实找到了匹配
[vaibhavc@freebsd-vai ~]$ cat acb
subbookkeeper
[vaibhavc@freebsd-vai ~]$ egrep "((\w)\2){4,}" -i acb
subbookkeeper