正規表現を使用して、同じ連続文字を含む3つ以上の単語を含むすべての行を見つけます。

正規表現を使用して、同じ連続文字を含む3つ以上の単語を含むすべての行を見つけます。

一致する行の例は次のとおりです。 GuTTえ、ルBBing, 遊牧民, 中, Nit, Tu¥¥待って、タグボート

この行には3つの単語が含まれており、すべて2つの同じ文字が連続しています。

現在、次の正規表現およびgrep -Pコマンドを使用しています(?:.*(?:(\w)\1).*){3}

この正規表現は機能しますが、次の行がある場合:Gutter, Rutting, Nomad, Among, Nit, Turret, Tugekekekekekekekekekekekeregex101.comで重大なバックトラッキングエラーが発生します(https://regex101.com/r/3YFCAj/1)。

バックトラッキングの問題なくこの正規表現を検索するにはどうすればよいですか?

ベストアンサー1

スタイル正規表現を使用するには、Perl次のようにします。

(\b\w*(\w)\2\w*\b.*){3}

説明する:

  • (\w)\22つの同じ連続文字を一致させます。\22番目に一致するグループ、つまり(\w)その前のグループと一致します。
  • \w*(\w)\2\w*これらの文字は単語内になければならず、他の単語文字の前または後になければなりません。
  • \b\w*(\w)\2\w*\b- この単語は単語の境界に囲まれている必要があります。
  • .*- 各単語の後に異なる文字が続くことがあります。
  • (\b\w*(\w)\2\w*\b.*){3}- この最後の部分を3回繰り返さなければ、その単語を3つ以上見つけることができます。

おすすめ記事