1

こんにちは、文字列の 2 番目の外観に一致させたいのですが、それを一致させるだけで、他には何も一致させないため、この例では、角括弧内の word1 が一致する必要があることを意味します。

word1 tex text [word1] text
word1 [word1] word1
word1 [word1]
word1 text [word1]

私は正規表現を学んでいますが、インターネットでも本でも答えが見つかりません。.net 正規表現互換または perl を受け入れるメモ帳エディターを使用しています。

ありがとうございました

4

2 に答える 2

1

それはあなたが試合で何をしたいかによって異なります。

一致するかどうかのブール値を取得したいだけの場合は、単語が 2 回あるかどうかを確認するのは簡単です。

word1.*word1

は、.*任意の数の任意の文字に一致するため、その間にある単語を 2 回検索するだけです。

交換したい場合は、シンプルにしてください。すべてを置き換えるだけです:

word1(.*?)word1

交換するには、 を追加する必要があります?。は貪欲にならないようにするため、 ?word1*が 3 つある場合、2 番目に出現する word1 を食べません。

マッチを次のように置き換えます

word1\1newword

\1、括弧内のすべてを表します (つまり、 によってピックアップされるすべて.*?)。使用\している正規表現エンジンによって異なる場合があります。たとえば、Powershell (および .NET だと思います) は、$代わりに\.

基本的に、結果をどうしたいかを考えてください。2 番目のオカレンスだけでなく、一致させることができるより大きな文字列があるかどうかを自問してください。

于 2012-12-19T01:09:37.920 に答える
1

何かの背後にあるものだけを一致させるには、後読みを使用する必要があります。2 回出現するものに一致させるには、一致するグループと後方参照を使用できます。

/(?<=\b\1\b.*?)\b(\w+)\b/

ただし、後読みの複雑さはほとんどの言語で制限されているため、これが有効かどうかはわかりません。

于 2012-12-19T00:57:33.430 に答える