正規表現要素(?<name>)
を使うと、正規表現のグループ化と同時に名前を与えることができます。 グループに名前を与えることにより、正規表現の構造を把握しやすくすることができ、またグループを参照するコードの可読性を向上させることができます。 例えば正規表現\d{4}
にグループ名name
を与える場合は(?<name>\d{4})
と記述します。
Match.Groupsプロパティから名前付きグループを参照する場合は、match.Groups["name"]
のように、インデックスの代わりにグループ名を文字列で指定します。
グループ名が与えられている場合でも、インデックスを使って個々のグループを参照することもできます。 各グループは、名前付きかどうかによらず、常に同じ順序でグループ番号が割り当てられます。 (.NET Frameworkで使用できる正規表現 §.グループ番号の割り振られ方)
Match.Groupsプロパティと名前付きグループを使ってyyyy-mm-dd形式にマッチする文字列の年月日をそれぞれ取得する
using System;
using System.Text.RegularExpressions;
class Sample {
static void Main()
{
var text = "2016-02-29";
var pattern = @"(?<y>\d{4})-(?<m>\d{2})-(?<d>\d{2})"; // yyyy-mm-dd形式の日付
//var pattern = @"(\d{4})-(\d{2})-(\d{2})"; // 上記と同等の正規表現をグループ名なしで記述した場合
var m = Regex.Match(text, pattern);
// マッチした文字列のうち、グループ名'y', 'm', 'd'のそれぞれに対応する箇所を取得する
Console.WriteLine(m.Groups["y"].Value);
Console.WriteLine(m.Groups["m"].Value);
Console.WriteLine(m.Groups["d"].Value);
Console.WriteLine();
// グループ名を与えている場合でも、各グループをインデックス(グループ番号)で参照することもできる
Console.WriteLine(m.Groups[1].Value);
Console.WriteLine(m.Groups[2].Value);
Console.WriteLine(m.Groups[3].Value);
}
}
実行結果
2016 02 29 2016 02 29