文字のグループを一致させたいが、2つのグループが同じである場合にのみ一致させる場合、どのような正規表現を使用する必要がありますか?
たとえば、以下は一致する必要があります
Hello John, Goodbye John.
Hello Amy, Goodbye Amy.
しかし、これらは一致するべきではありません
Hello John, Goodbye Amy.
Hello Amy, Goodbye John.
文字のグループを一致させたいが、2つのグループが同じである場合にのみ一致させる場合、どのような正規表現を使用する必要がありますか?
たとえば、以下は一致する必要があります
Hello John, Goodbye John.
Hello Amy, Goodbye Amy.
しかし、これらは一致するべきではありません
Hello John, Goodbye Amy.
Hello Amy, Goodbye John.
正規表現エンジンに応じて、正規表現の後方参照を使用して、以前に一致したアイテムを参照(および一致)できます。
Hello (\w+), Goodbye \1.
これにより、「Goodbye」の後のテキストが最初の一致と完全に一致する場合にのみ一致が生成されます(つまり、「Hello」の後の単語)。
使用例(Python):
>>> re.findall(r'Hello (\w+), Goodbye \1.', 'Hello John, Goodbye John. Hello Amy, Goodbye Amy. ')
['John', 'Amy']
>>> re.findall(r'Hello (\w+), Goodbye \1.', 'Hello John, Goodbye Amy. Hello Amy, Goodbye John. ')
[]
後方参照を使用すると、この問題に取り組む簡単な方法です。これらは、式で以前に括弧で囲まれた要素への参照です。
たとえば、以下は、後方参照が「John」と一致する場合にのみ一致します。
/こんにちは(ジョン)、さようなら($ 1)/
$ 1は、2番目の要素が最初の要素と一致することを保証します。
あなたの問題により当てはまる、以下はどんな単語文字(名前)も許します:
/ hello(\ w +)、さようなら($ 1)/ gi
乾杯、G