正規表現のパターンマッチ(Regex)で検索した部分文字列の取得
正規表現のパターンマッチ(Regex)で文字列を検索する場合、結構な割合で()で括った部分式で文字列をキャプチャするのですが、C#でやるのは今回が初めてだったのでメモしておきます。
コード
以下は、URLから部分文字列としてidを取得するコードになります。
var str = "http://localhost/example/123";
var m = System.Text.RegularExpressions.Regex.Match(str, @"^.*/example/(?<id>[0-9]+)/?$");
if (!m.Success) return;
Console.WriteLine(m.Value); // http://localhost/example/123
Console.WriteLine(m.Groups[0].Value); // http://localhost/example/123
Console.WriteLine(m.Groups[1].Value); // 123
Console.WriteLine(m.Groups["id"].Value); // 123
「?<id>」はキャプチャした部分文字列に配列のインデックスではなく、名前でアクセスできるようになります。インデックスでのアクセスだけでよければ不要です。
正規表現全体に一致する文字列はValueで取得できますが、部分式でキャプチャした文字列については、Groupsという構造体に格納されています。
探し方が悪かったのか、キャプチャした文字列をこのGroupsでアクセスできることが、なかなか分かりませんでした。