使用正则表达式查找包含 3 个或更多具有连续相同字母的单词的所有行

使用正则表达式查找包含 3 个或更多具有连续相同字母的单词的所有行

匹配行的示例是: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 个这样的单词。

相关内容