テキストに 2 回出現する英文の単語に一致する必要があります。私は試した
(^|\ )([^\ ][^\b]*\b).*\ \2\b
しかし、これはすべての行に一致するわけではありません。
テキストに 2 回出現する英文の単語に一致する必要があります。私は試した
(^|\ )([^\ ][^\b]*\b).*\ \2\b
しかし、これはすべての行に一致するわけではありません。
正規表現にはいくつかの問題があります。たとえば、\b
単語境界は文字クラスでは使用できないため[^\b]*
、意図したとおりに機能しません。
あなたはおそらく次のようなものが欲しい
(?s)\b(\w+)\b.*\b\1\b
これにより、単語の最初の出現から最後までのテキスト全体が一致します。これは、実際に意図したものではない可能性があります。
別のアイデア:
(?s)\b(\w+)\b.*?\b\1\b
これは、単語の最初の出現から次の出現までのテキストのみに一致します。
これらの両方のアプローチの問題は、たとえば次のようなテキストで
foo bar bar foo
正規表現は from foo
tofoo
に一致し、間に重複があることをやみくもに無視しbar
ます。
したがって、実際に重複して発生するすべての単語を見つけたい場合は、次を使用します
(?s)\b(\w+)\b(?=.*?\b\1\b)
説明:
(?s) # Allow the dot to match newlines
\b(\w+)\b # Match an entire word
(?= # Assert that the following regex can be matched from here:
.*? # Any number of characters
\b\1\b # followed by the word that was previously captured
) # End of lookahead