1

1 つ以上の一致を含む 1 行のテキストがあります。私は継続的に物事を変えているので、名前付きのキャプチャ グループを使用しています。これにより簡単になります。

弦:

blah blah blah dasf{{optionA:B4}}t estsdf{{optionB:B4}}sadf{{optionB:B4}}sadf13

パターン:

(?<choice>\{\{(?<c>optionA|optionB):(?<d>[A-Z]\d{1,2})\}\})

このタイプの構造を扱うオンラインで見つけることができるすべての例は、名前付きのキャプチャ グループを使用していません。

私の例のシナリオでは、3 つの一致があり、一致ごとに、「choice」、「c」、および「d」キャプチャ グループのコンテンツにアクセスできるようにしたいと考えています。

誰かがこれを行う方法の簡単な例を教えてもらえますか?

4

1 に答える 1

3

一致後に名前付きキャプチャ グループの内容にアクセスするには、正規表現オブジェクトを使用する必要があります。

Dim RegexObj As New Regex("(?<quote>['""])(?<text>.*?)\k<quote>")
Result = RegexObj.Match(Subject).Groups("text").Value

これで、キャプチャ グループResultの内容が含まれます。(?<text>...)

.NextMatch()複数の一致の場合、最後の一致が見つかるまで呼び出して、結果を反復処理できます。

Dim ResultList As StringCollection = New StringCollection()
Dim RegexObj As New Regex("(?<quote>['""])(?<text>.*?)\k<quote>")
Dim Result As Match = RegexObj.Match(Subject)
While MatchResult.Success
    ResultList.Add(Result.Groups("text").Value)
    Result = Result.NextMatch()
End While

質問に対する元の回答(グループのキャプチャではなく、後方参照に関するものでした):

後方参照を使用できる状況は 2 つあります。

  • 同じ正規表現内で後方参照を参照するには、 を使用します\k<groupname>
  • 名前付きグループに一致するテキストを置換テキストに挿入するには、 を使用します${groupname}

例えば、

res = Regex.Replace(subject, "(?<quote>['""])(?<text>.*?)\k<quote>", "*${text}*")

変更されます

This is a "quoted text" and 'so is this'!

の中へ

This is a *quoted text* and *so is this*!
于 2012-12-13T19:50:08.733 に答える