ExplicitCapture
При RegexOptions.ExplicitCapture круглые
скобки ( ) не создают нумерованную
группу. Именованный захват (?<name>...)
по-прежнему работает. Удобно, когда скобки
нужны только для приоритета, а не для
Groups.
Синтаксис
new Regex(@"(?<g>abc)", RegexOptions.ExplicitCapture);
Пример
Давайте проверить, что (abc) не даёт группу
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
var m = Regex.Match("abcde", @"(abc)", RegexOptions.ExplicitCapture);
Console.WriteLine(m.Groups.Count);
}
}
Результат выполнения кода:
1
Пример
Давайте прочитать именованную группу (?<g>abc):
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
var m = Regex.Match("abcde", @"(?<g>abc)", RegexOptions.ExplicitCapture);
Console.WriteLine(m.Groups["g"].Value);
}
}
Результат выполнения кода:
"abc"
Пример
Давайте сравнить без флага - группа
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
var m = Regex.Match("abcde", @"(abc)");
Console.WriteLine(m.Groups[1].Value);
}
}
Результат выполнения кода:
"abc"
Смотрите также
-
перечисление
RegexOptions,
куда входит ExplicitCapture -
класс
Regex,
которому передают флаги -
якорь
anchor,
который ведёт себя иначе при Multiline -
символ
any,
который с точкой связан Singleline