キャプチャとは、グループ化された正規表現にマッチした文字列の一つ一つを表します。 言い換えると、正規表現の部分式にマッチした箇所がキャプチャとなります。
例えば、3桁の数字の連続を表す正規表現(\d{3})+
を考えた場合、この正規表現内のグループ(\d{3})
には量指定子+
があるため、グループ(\d{3})
にマッチする文字列は複数となる場合があります。 この一つ一つがキャプチャとなります。 このように、グループに対して*
, +
や{n}
などの量指定子を指定した場合には、マッチした個々の文字列をキャプチャによって参照することができます。
キャプチャはCaptureクラスで扱います。 Captureクラスは、Groupクラスと同様にRegexクラスやMatchクラスから直接返されることはなく、Group.Capturesプロパティを通じて参照します。
グループ化された正規表現にマッチする箇所が複数ある場合、match.Groupsプロパティは各グループの最後にマッチした箇所=最後のキャプチャを表すGroupを返します。 一方group.Capturesプロパティは、マッチした個々の箇所に対応するCaptureを返します。 グループとは異なり、各キャプチャには0から始まるインデックスが割り当てられます。
Group.Capturesプロパティを参照して正規表現の部分式にマッチした箇所を列挙する
Imports System
Imports System.Text.RegularExpressions
Class Sample
Shared Sub Main()
Dim text As String = "0123456789"
' 3桁の数字("(\d{3})")がひとつ以上連続("+")する箇所を取得
Dim m As Match = Regex.Match(text, "(\d{3})+")
' グループ1の正規表現("(\d{3})")にマッチした文字列を取得して表示
' (最後にマッチした箇所が表示される)
Console.WriteLine(m.Groups(1).Value)
Console.WriteLine()
' グループ1の正規表現にマッチした文字列(=キャプチャ)を列挙して表示
For Each c As Capture In m.Groups(1).Captures
Console.WriteLine(c.Value)
Next
End Sub
End Class
実行結果
678 012 345 678