次のテキスト入力dogcatcatcatと次のようなパターンがあるとします。dog(cat(catcat))
この場合、3つのグループがあり、最初のグループ(メジャーグループ)が一致に対応します。
== dogcatcatcatおよびGroup0 ==に一致dogcatcatcat
グループ1 == catcatcat
グループ2 == catcat
それで、それは一体何なのでしょう?
Regexクラスを使用してC#(.NET)で書かれた小さな例を考えてみましょう。
int matchIndex = 0;
int groupIndex = 0;
int captureIndex = 0;
foreach (Match match in Regex.Matches(
        "dogcatabcdefghidogcatkjlmnopqr", // input
        @"(dog(cat(...)(...)(...)))") // pattern
)
{
    Console.Out.WriteLine($"match{matchIndex++} = {match}");
    foreach (Group @group in match.Groups)
    {
        Console.Out.WriteLine($"\tgroup{groupIndex++} = {@group}");
        foreach (Capture capture in @group.Captures)
        {
            Console.Out.WriteLine($"\t\tcapture{captureIndex++} = {capture}");
        }
        captureIndex = 0;
    }
    groupIndex = 0;
    Console.Out.WriteLine();
        }
出力:
match0 = dogcatabcdefghi
    group0 = dogcatabcdefghi
        capture0 = dogcatabcdefghi
    group1 = dogcatabcdefghi
        capture0 = dogcatabcdefghi
    group2 = catabcdefghi
        capture0 = catabcdefghi
    group3 = abc
        capture0 = abc
    group4 = def
        capture0 = def
    group5 = ghi
        capture0 = ghi
match1 = dogcatkjlmnopqr
    group0 = dogcatkjlmnopqr
        capture0 = dogcatkjlmnopqr
    group1 = dogcatkjlmnopqr
        capture0 = dogcatkjlmnopqr
    group2 = catkjlmnopqr
        capture0 = catkjlmnopqr
    group3 = kjl
        capture0 = kjl
    group4 = mno
        capture0 = mno
    group5 = pqr
        capture0 = pqr
最初の一致(match0)だけを分析しましょう。
あなたが見ることができるように3つのがあるマイナーなグループは:group3、group4およびgroup5
    group3 = kjl
        capture0 = kjl
    group4 = mno
        capture0 = mno
    group5 = pqr
        capture0 = pqr
これらのグループ(3〜5)は、メインパターンの「サブパターン」のために作成されました(...)(...)(...) (dog(cat(...)(...)(...)))
の値はgroup3そのキャプチャに対応します(capture0)。(group4およびの場合と同様group5)。のようなグループの繰り返しがないため(...){3}です。
では、グループの繰り返しがある別の例を考えてみましょう。
我々はから(コード上に示すために)一致する正規表現パターンを変更する場合(dog(cat(...)(...)(...)))に(dog(cat(...){3}))は、次があることに気づくでしょうグループ繰り返し:(...){3}。
これで出力が変更されました:
match0 = dogcatabcdefghi
    group0 = dogcatabcdefghi
        capture0 = dogcatabcdefghi
    group1 = dogcatabcdefghi
        capture0 = dogcatabcdefghi
    group2 = catabcdefghi
        capture0 = catabcdefghi
    group3 = ghi
        capture0 = abc
        capture1 = def
        capture2 = ghi
match1 = dogcatkjlmnopqr
    group0 = dogcatkjlmnopqr
        capture0 = dogcatkjlmnopqr
    group1 = dogcatkjlmnopqr
        capture0 = dogcatkjlmnopqr
    group2 = catkjlmnopqr
        capture0 = catkjlmnopqr
    group3 = pqr
        capture0 = kjl
        capture1 = mno
        capture2 = pqr
ここでも、最初の一致(match0)のみを分析します。
そこにはより多くのないマイナーグループは group4及びgroup5ための(...){3} 反復({n}は、前記N> = 2、それらが一つの群に併合してきました)group3。
この場合、group3値はそれcapture2(つまり、最後のキャプチャ)に対応します。
あなたはすべての3つのインナーキャプチャを(必要な場合はこのようにcapture0、capture1、capture2)あなたは、グループの一巡する必要がありますCapturesコレクション。
結論としては、パターンのグループを設計する方法に注意してください。あなたのような、グループの仕様を引き起こすもの振る舞い先行考えなければならない(...)(...)、(...){2}または(.{3}){2}など
うまくいけば、Captures、Groups、Matchesの違いを明らかにするのにも役立ちます。
               
              
a functionality that won't be used in the majority of cases彼はボートを逃したと思う。短期的に(?:.*?(collection info)){4,20}は効率が数百パーセント以上向上します。