トップページに戻る    次の正規表現パズルへ    前の正規表現パズルへ

9-9 条件分岐(if then else)で括弧のキャプチャ有無を使用

正規表現パズル

.NETの条件分岐(if then else)で括弧のキャプチャ有無を使用するサンプルです。

MSDN --- 有効なキャプチャグループに基づく条件一致


ソース

using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string[] strArr = {"AB",
                           "A-B-",
                           "A-B",
                           "AB-"};

        //位置指定のキャプチャを使用
        const string Pattern = @"^[A-Z](-)?[A-Z](?(1)-)$";

        //名前指定のキャプチャを使用
        //const string Pattern = @"^[A-Z](?<Cap1>-)?[A-Z](?(Cap1)-)";

        System.Console.WriteLine("Pattern {0}", Pattern);
        foreach (string each in strArr) {
            string WillOut = each;
            if (Regex.IsMatch(each, Pattern)) {
                WillOut += " matchs ";
                WillOut += Regex.Match(each, Pattern).Value;
            }
            else WillOut += " no match";
            System.Console.WriteLine(WillOut);
        }
    }
}


実行結果(位置指定のキャプチャを使用)

Pattern ^[A-Z](-)?[A-Z](?(1)-)$
AB matchs AB
A-B- matchs A-B-
A-B no match
AB- no match


実行結果(名前指定のキャプチャを使用)

Pattern ^[A-Z](?<Cap1>-)?[A-Z](?(Cap1)-)
AB matchs AB
A-B- matchs A-B-
A-B no match
AB- matchs AB