匹配行的示例是:GuTT呃,茹BBing、Nomad、Among、Nit、TuRR等,拖船
该行包含 3 个单词,它们都有 2 个连续的相同字母。
我目前正在使用以下正则表达式和 grep -P 命令:(?:.*(?:(\w)\1).*){3}
。
这个正则表达式有效,但是当我有以下行时:Gutter, Rutting, Nomad, Among, Nit, Turret, Tugekekekekekekekekekekeke
我在 regex101.com 上收到灾难性的回溯错误(https://regex101.com/r/3YFCAj/1)。
如何在没有回溯问题的情况下搜索此正则表达式?
答案1
如果你想使用Perl
样式正则表达式,那应该可以:
(\b\w*(\w)\2\w*\b.*){3}
解释:
(\w)\2
将匹配两个相同的连续字符。将会\2
匹配第二个匹配组,即(\w)
它之前的组。\w*(\w)\2\w*
这些字符应该位于单词内,并且之前和/或之后还有其他单词字符。\b\w*(\w)\2\w*\b
- 这些单词应该被单词边界包围。.*
- 每个单词后面可以有任何其他字符。(\b\w*(\w)\2\w*\b.*){3}
- 最后这部分应该重复 3 次以找到至少 3 个这样的单词。