Match.Groups Свойство
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Получает коллекцию групп, соответствующих регулярному выражению.
public:
virtual property System::Text::RegularExpressions::GroupCollection ^ Groups { System::Text::RegularExpressions::GroupCollection ^ get(); };
public virtual System.Text.RegularExpressions.GroupCollection Groups { get; }
member this.Groups : System.Text.RegularExpressions.GroupCollection
Public Overridable ReadOnly Property Groups As GroupCollection
Значение свойства
Группы символов, соответствующие шаблону.
Примеры
В следующем примере предпринимается попытка сопоставить шаблон регулярного выражения с примером строки. В примере свойство используется Groups для хранения сведений, полученных совпадением для отображения в консоли.
#using <System.dll>
using namespace System;
using namespace System::Text::RegularExpressions;
void main()
{
String^ text = "One car red car blue car";
String^ pat = "(\\w+)\\s+(car)";
// Compile the regular expression.
Regex^ r = gcnew Regex( pat,RegexOptions::IgnoreCase );
// Match the regular expression pattern against a text string.
Match^ m = r->Match(text);
int matchCount = 0;
while ( m->Success )
{
Console::WriteLine( "Match{0}", ++matchCount );
for ( int i = 1; i <= 2; i++ )
{
Group^ g = m->Groups[ i ];
Console::WriteLine( "Group{0}='{1}'", i, g );
CaptureCollection^ cc = g->Captures;
for ( int j = 0; j < cc->Count; j++ )
{
Capture^ c = cc[ j ];
System::Console::WriteLine( "Capture{0}='{1}', Position={2}", j, c, c->Index );
}
}
m = m->NextMatch();
}
}
// This example displays the following output:
// Match1
// Group1='One'
// Capture0='One', Position=0
// Group2='car'
// Capture0='car', Position=4
// Match2
// Group1='red'
// Capture0='red', Position=8
// Group2='car'
// Capture0='car', Position=12
// Match3
// Group1='blue'
// Capture0='blue', Position=16
// Group2='car'
// Capture0='car', Position=21
using System;
using System.Text.RegularExpressions;
class Example
{
static void Main()
{
string text = "One car red car blue car";
string pat = @"(\w+)\s+(car)";
// Instantiate the regular expression object.
Regex r = new Regex(pat, RegexOptions.IgnoreCase);
// Match the regular expression pattern against a text string.
Match m = r.Match(text);
int matchCount = 0;
while (m.Success)
{
Console.WriteLine("Match"+ (++matchCount));
for (int i = 1; i <= 2; i++)
{
Group g = m.Groups[i];
Console.WriteLine("Group"+i+"='" + g + "'");
CaptureCollection cc = g.Captures;
for (int j = 0; j < cc.Count; j++)
{
Capture c = cc[j];
System.Console.WriteLine("Capture"+j+"='" + c + "', Position="+c.Index);
}
}
m = m.NextMatch();
}
}
}
// This example displays the following output:
// Match1
// Group1='One'
// Capture0='One', Position=0
// Group2='car'
// Capture0='car', Position=4
// Match2
// Group1='red'
// Capture0='red', Position=8
// Group2='car'
// Capture0='car', Position=12
// Match3
// Group1='blue'
// Capture0='blue', Position=16
// Group2='car'
// Capture0='car', Position=21
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim text As String = "One car red car blue car"
Dim pattern As String = "(\w+)\s+(car)"
' Instantiate the regular expression object.
Dim r As Regex = new Regex(pattern, RegexOptions.IgnoreCase)
' Match the regular expression pattern against a text string.
Dim m As Match = r.Match(text)
Dim matchcount as Integer = 0
Do While m.Success
matchCount += 1
Console.WriteLine("Match" & (matchCount))
Dim i As Integer
For i = 1 to 2
Dim g as Group = m.Groups(i)
Console.WriteLine("Group" & i & "='" & g.ToString() & "'")
Dim cc As CaptureCollection = g.Captures
Dim j As Integer
For j = 0 to cc.Count - 1
Dim c As Capture = cc(j)
Console.WriteLine("Capture" & j & "='" & c.ToString() _
& "', Position=" & c.Index)
Next
Next
m = m.NextMatch()
Loop
End Sub
End Module
' This example displays the following output:
' Match1
' Group1='One'
' Capture0='One', Position=0
' Group2='car'
' Capture0='car', Position=4
' Match2
' Group1='red'
' Capture0='red', Position=8
' Group2='car'
' Capture0='car', Position=12
' Match3
' Group1='blue'
' Capture0='blue', Position=16
' Group2='car'
' Capture0='car', Position=21
Комментарии
Шаблон регулярного выражения может включать вложенные выражения, которые определяются путем заключения части шаблона регулярного выражения в круглые скобки. Каждая такая часть выражения формирует группу. Свойство Groups предоставляет доступ к сведениям о совпадениях с частью выражения. Например, шаблон (\d{3})-(\d{3}-\d{4})
регулярного выражения , соответствующий номерам телефонов в Северной Америке, имеет две части выражения. Первый состоит из кода города, который состоит из первых трех цифр номера телефона. Эта группа захватывается первой частью регулярного выражения , (\d{3})
. Второй состоит из отдельного номера телефона, который состоит из последних семи цифр номера телефона. Эта группа фиксируется второй частью регулярного выражения , (\d{3}-\d{4})
. Затем эти две группы можно извлечь из GroupCollection объекта, возвращаемого свойством Groups , как показано в следующем примере.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"(\d{3})-(\d{3}-\d{4})";
string input = "212-555-6666 906-932-1111 415-222-3333 425-888-9999";
MatchCollection matches = Regex.Matches(input, pattern);
foreach (Match match in matches)
{
Console.WriteLine("Area Code: {0}", match.Groups[1].Value);
Console.WriteLine("Telephone number: {0}", match.Groups[2].Value);
Console.WriteLine();
}
Console.WriteLine();
}
}
// The example displays the following output:
// Area Code: 212
// Telephone number: 555-6666
//
// Area Code: 906
// Telephone number: 932-1111
//
// Area Code: 415
// Telephone number: 222-3333
//
// Area Code: 425
// Telephone number: 888-9999
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "(\d{3})-(\d{3}-\d{4})"
Dim input As String = "212-555-6666 906-932-1111 415-222-3333 425-888-9999"
Dim matches As MatchCollection = Regex.Matches(input, pattern)
For Each match As Match In matches
Console.WriteLine("Area Code: {0}", match.Groups(1).Value)
Console.WriteLine("Telephone number: {0}", match.Groups(2).Value)
Console.WriteLine()
Next
Console.WriteLine()
End Sub
End Module
' The example displays the following output:
' Area Code: 212
' Telephone number: 555-6666
'
' Area Code: 906
' Telephone number: 932-1111
'
' Area Code: 415
' Telephone number: 222-3333
'
' Area Code: 425
' Telephone number: 888-9999
Объект GroupCollection , возвращаемый свойством Match.Groups , является объектом коллекции с нуля, который всегда имеет по крайней мере один элемент. Если обработчик регулярных выражений не может найти совпадения в определенной входной строке, Group.Success свойству одного Group объекта в коллекции (объекту с индексом false
0) присваивается значение , а свойству Group объекта Value присваивается значение String.Empty. Если обработчик регулярных выражений может найти совпадение, первый элемент GroupCollection объекта (элемент с индексом 0), возвращаемый свойством Groups , содержит строку, соответствующую всему шаблону регулярного выражения. Каждый последующий элемент, начиная с одного индекса вверх, представляет захватываемую группу, если регулярное выражение включает захватываемые группы. Дополнительные сведения см. в разделе "Конструкции группирования и объекты регулярных выражений" статьи Конструкции группирования .