Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Привязки, или атомарные утверждения нулевой ширины, указывают позицию в строке, где должно произойти совпадение. При использовании привязки в выражении поиска обработчик регулярных выражений не перемещается по строке или использует символы; Он ищет совпадение только в указанной позиции. Например, ^ указывает, что совпадение должно начинаться в начале строки. Поэтому регулярное выражение ^http: совпадает с "http:" только в том случае, если это происходит в начале строки. В следующей таблице перечислены привязки, поддерживаемые регулярными выражениями в .NET.
| Anchor | Описание |
|---|---|
^ |
По умолчанию совпадение должно происходить в начале строки; в многострочном режиме — в начале каждой строки. Дополнительные сведения см. в разделе "Начало строки или линии". |
$ |
По умолчанию соответствие должно происходить в конце строки или до \n конца строки; в многострочном режиме соответствие должно происходить в конце строки или до \n конца строки. Дополнительные сведения см. в разделе "Конец строки или линии". |
\A |
Совпадение должно происходить только в начале строки (без поддержки многострочного режима). Дополнительные сведения см. в разделе "Только начало строки". |
\Z |
Совпадение должно происходить в конце строки или до `\n` в конце строки. Дополнительные сведения см. в разделе "Конец строки" или "Перед окончанием новой строки". |
\z |
Совпадение должно происходить только в конце строки. Дополнительные сведения см. в разделе "Только конец строки". |
\G |
Совпадение должно начинаться с позиции, на которой закончилось предыдущее совпадение, или, если предыдущего совпадения не было, с позиции в строке, где началось сопоставление. Дополнительные сведения см. в разделе "Смежные совпадения". |
\b |
Совпадение должно происходить на границе слов. Дополнительные сведения см. в разделе Граница слова. |
\B |
Совпадение не должно происходить на границе слова. Дополнительные сведения см. в разделе Non-Word Boundary. |
Начало строки или линии: ^
По умолчанию привязка ^ указывает, что следующий шаблон должен начинаться с первой позиции символа строки. При использовании ^ с параметром RegexOptions.Multiline (см. параметры регулярного выражения), совпадение должно происходить в начале каждой строки.
В следующем примере используется привязка ^ в регулярном выражении, которое извлекает сведения о годах, в течение которых существовали некоторые профессиональные бейсбольные команды. В примере вызываются две перегрузки метода Regex.Matches:
Вызов перегрузки Matches(String, String) находит только первую подстроку во входной строке, которая соответствует шаблону регулярного выражения.
Вызов перегрузки Matches(String, String, RegexOptions) с параметром
options, установленным в RegexOptions.Multiline, находит все пять подстрок.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string input = "Brooklyn Dodgers, National League, 1911, 1912, 1932-1957\n" +
"Chicago Cubs, National League, 1903-present\n" +
"Detroit Tigers, American League, 1901-present\n" +
"New York Giants, National League, 1885-1957\n" +
"Washington Senators, American League, 1901-1960\n";
string pattern = @"^((\w+(\s?)){2,}),\s(\w+\s\w+),(\s\d{4}(-(\d{4}|present))?,?)+";
Match match;
match = Regex.Match(input, pattern);
while (match.Success)
{
Console.Write("The {0} played in the {1} in",
match.Groups[1].Value, match.Groups[4].Value);
foreach (Capture capture in match.Groups[5].Captures)
Console.Write(capture.Value);
Console.WriteLine(".");
match = match.NextMatch();
}
Console.WriteLine();
match = Regex.Match(input, pattern, RegexOptions.Multiline);
while (match.Success)
{
Console.Write("The {0} played in the {1} in",
match.Groups[1].Value, match.Groups[4].Value);
foreach (Capture capture in match.Groups[5].Captures)
Console.Write(capture.Value);
Console.WriteLine(".");
match = match.NextMatch();
}
Console.WriteLine();
}
}
// The example displays the following output:
// The Brooklyn Dodgers played in the National League in 1911, 1912, 1932-1957.
//
// The Brooklyn Dodgers played in the National League in 1911, 1912, 1932-1957.
// The Chicago Cubs played in the National League in 1903-present.
// The Detroit Tigers played in the American League in 1901-present.
// The New York Giants played in the National League in 1885-1957.
// The Washington Senators played in the American League in 1901-1960.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim input As String = "Brooklyn Dodgers, National League, 1911, 1912, 1932-1957" + vbCrLf +
"Chicago Cubs, National League, 1903-present" + vbCrLf +
"Detroit Tigers, American League, 1901-present" + vbCrLf +
"New York Giants, National League, 1885-1957" + vbCrLf +
"Washington Senators, American League, 1901-1960" + vbCrLf
Dim pattern As String = "^((\w+(\s?)){2,}),\s(\w+\s\w+),(\s\d{4}(-(\d{4}|present))?,?)+"
Dim match As Match
match = Regex.Match(input, pattern)
Do While match.Success
Console.Write("The {0} played in the {1} in",
match.Groups(1).Value, match.Groups(4).Value)
For Each capture As Capture In match.Groups(5).Captures
Console.Write(capture.Value)
Next
Console.WriteLine(".")
match = match.NextMatch()
Loop
Console.WriteLine()
match = Regex.Match(input, pattern, RegexOptions.Multiline)
Do While match.Success
Console.Write("The {0} played in the {1} in",
match.Groups(1).Value, match.Groups(4).Value)
For Each capture As Capture In match.Groups(5).Captures
Console.Write(capture.Value)
Next
Console.WriteLine(".")
match = match.NextMatch()
Loop
Console.WriteLine()
End Sub
End Module
' The example displays the following output:
' The Brooklyn Dodgers played in the National League in 1911, 1912, 1932-1957.
'
' The Brooklyn Dodgers played in the National League in 1911, 1912, 1932-1957.
' The Chicago Cubs played in the National League in 1903-present.
' The Detroit Tigers played in the American League in 1901-present.
' The New York Giants played in the National League in 1885-1957.
' The Washington Senators played in the American League in 1901-1960.
Шаблон регулярного выражения ^((\w+(\s?)){2,}),\s(\w+\s\w+),(\s\d{4}(-(\d{4}|present))?,?)+ определяется, как показано в следующей таблице.
| Рисунок | Описание |
|---|---|
^ |
Запустите совпадение в начале входной строки (или в начале строки, если метод вызывается с параметром RegexOptions.Multiline). |
((\w+(\s?)){2,} |
Соответствует одному или нескольким символам слова, за которым следует либо ноль, либо по одному пробелу по крайней мере два раза. Это первая группа захвата. Это выражение также определяет вторую и третью группы захвата: вторая содержит захваченное слово, а третья — захваченный пробел. |
,\s |
Соответствует запятой, за которой следует символ пробела. |
(\w+\s\w+) |
Совпадение одного или нескольких символов слова, затем пробел, затем один или несколько символов слова. Это четвертая группа захвата. |
, |
Найти запятую. |
\s\d{4} |
Соответствует пробелу, за которым следует четыре десятичные цифры. |
(-(\d{4}|present))? |
Совпадает с нулем или одним вхождением дефиса, за которым следуют четыре цифры или последовательность "present". Это шестая группа захвата. Она также включает в себя седьмую группу захвата. |
,? |
Соответствует нулю или одному вхождению запятой. |
(\s\d{4}(-(\d{4}|present))?,?)+ |
Соответствует одному или нескольким вхождениям следующего: пробел, четыре десятичные цифры, ноль или одно вхождение дефиса, за которым следует четыре десятичные цифры или строка "present", а также ноль или одна запятая. Это пятая группа захвата. |
Конец строки или линии: $
Привязка $ указывает, что предыдущий шаблон должен быть в конце входной строки или перед \n в конце входной строки.
При использовании $ с параметром RegexOptions.Multiline, совпадение также может произойти в конце строки. Обратите внимание, что $ удовлетворяется в \n, но не в \r\n (сочетание символов возврата каретки и новой строки, или CR/LF). Для обработки сочетания символов CR/LF включите \r?$ в шаблон регулярного выражения. Обратите внимание, что \r?$ будет включать любой \r из них в совпадение.
Начиная с .NET 11, вы можете использовать RegexOptions.AnyNewLine, чтобы сделать $ распознать все распространенные новые последовательности вместо \n. В отличие от \r?$ обходного решения, AnyNewLine обрабатывает \r\n как атомарную последовательность, поэтому \r не включается в соответствие. Дополнительные сведения см. в режиме AnyNewLine.
В следующем примере привязка $ добавляется к шаблону регулярного выражения, использованному в примере из раздела «Начало строки или линии». При использовании с исходной входной строкой, которая включает пять строк текста, Regex.Matches(String, String) метод не может найти совпадение, так как конец первой строки не соответствует шаблону $ . Если исходная входная строка разделена на массив строк, Regex.Matches(String, String) метод успешно соответствует каждой из пяти строк.
Regex.Matches(String, String, RegexOptions) Когда метод вызывается с настроенным параметром options, совпадения не найдены, так как шаблон регулярного выражения RegexOptions.Multiline не учитывает символ перевода каретки \r. Однако, когда шаблон регулярного выражения изменяется путем замены $ на \r?$, вызов метода Regex.Matches(String, String, RegexOptions) с параметром options, установленным в RegexOptions.Multiline, снова находит пять совпадений.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string cr = Environment.NewLine;
string input = "Brooklyn Dodgers, National League, 1911, 1912, 1932-1957" + cr +
"Chicago Cubs, National League, 1903-present" + cr +
"Detroit Tigers, American League, 1901-present" + cr +
"New York Giants, National League, 1885-1957" + cr +
"Washington Senators, American League, 1901-1960" + cr;
Match match;
string basePattern = @"^((\w+(\s?)){2,}),\s(\w+\s\w+),(\s\d{4}(-(\d{4}|present))?,?)+";
string pattern = basePattern + "$";
Console.WriteLine("Attempting to match the entire input string:");
match = Regex.Match(input, pattern);
while (match.Success)
{
Console.Write("The {0} played in the {1} in",
match.Groups[1].Value, match.Groups[4].Value);
foreach (Capture capture in match.Groups[5].Captures)
Console.Write(capture.Value);
Console.WriteLine(".");
match = match.NextMatch();
}
Console.WriteLine();
string[] teams = input.Split(new String[] { cr }, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine("Attempting to match each element in a string array:");
foreach (string team in teams)
{
match = Regex.Match(team, pattern);
if (match.Success)
{
Console.Write("The {0} played in the {1} in",
match.Groups[1].Value, match.Groups[4].Value);
foreach (Capture capture in match.Groups[5].Captures)
Console.Write(capture.Value);
Console.WriteLine(".");
}
}
Console.WriteLine();
Console.WriteLine("Attempting to match each line of an input string with '$':");
match = Regex.Match(input, pattern, RegexOptions.Multiline);
while (match.Success)
{
Console.Write("The {0} played in the {1} in",
match.Groups[1].Value, match.Groups[4].Value);
foreach (Capture capture in match.Groups[5].Captures)
Console.Write(capture.Value);
Console.WriteLine(".");
match = match.NextMatch();
}
Console.WriteLine();
pattern = basePattern + "\r?$";
Console.WriteLine(@"Attempting to match each line of an input string with '\r?$':");
match = Regex.Match(input, pattern, RegexOptions.Multiline);
while (match.Success)
{
Console.Write("The {0} played in the {1} in",
match.Groups[1].Value, match.Groups[4].Value);
foreach (Capture capture in match.Groups[5].Captures)
Console.Write(capture.Value);
Console.WriteLine(".");
match = match.NextMatch();
}
Console.WriteLine();
}
}
// The example displays the following output:
// Attempting to match the entire input string:
//
// Attempting to match each element in a string array:
// The Brooklyn Dodgers played in the National League in 1911, 1912, 1932-1957.
// The Chicago Cubs played in the National League in 1903-present.
// The Detroit Tigers played in the American League in 1901-present.
// The New York Giants played in the National League in 1885-1957.
// The Washington Senators played in the American League in 1901-1960.
//
// Attempting to match each line of an input string with '$':
//
// Attempting to match each line of an input string with '\r?$':
// The Brooklyn Dodgers played in the National League in 1911, 1912, 1932-1957.
// The Chicago Cubs played in the National League in 1903-present.
// The Detroit Tigers played in the American League in 1901-present.
// The New York Giants played in the National League in 1885-1957.
// The Washington Senators played in the American League in 1901-1960.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim input As String = "Brooklyn Dodgers, National League, 1911, 1912, 1932-1957" + vbCrLf +
"Chicago Cubs, National League, 1903-present" + vbCrLf +
"Detroit Tigers, American League, 1901-present" + vbCrLf +
"New York Giants, National League, 1885-1957" + vbCrLf +
"Washington Senators, American League, 1901-1960" + vbCrLf
Dim basePattern As String = "^((\w+(\s?)){2,}),\s(\w+\s\w+),(\s\d{4}(-(\d{4}|present))?,?)+"
Dim match As Match
Dim pattern As String = basePattern + "$"
Console.WriteLine("Attempting to match the entire input string:")
match = Regex.Match(input, pattern)
Do While match.Success
Console.Write("The {0} played in the {1} in",
match.Groups(1).Value, match.Groups(4).Value)
For Each capture As Capture In match.Groups(5).Captures
Console.Write(capture.Value)
Next
Console.WriteLine(".")
match = match.NextMatch()
Loop
Console.WriteLine()
Dim teams() As String = input.Split(New String() {vbCrLf}, StringSplitOptions.RemoveEmptyEntries)
Console.WriteLine("Attempting to match each element in a string array:")
For Each team As String In teams
match = Regex.Match(team, pattern)
If match.Success Then
Console.Write("The {0} played in the {1} in",
match.Groups(1).Value, match.Groups(4).Value)
For Each capture As Capture In match.Groups(5).Captures
Console.Write(capture.Value)
Next
Console.WriteLine(".")
End If
Next
Console.WriteLine()
Console.WriteLine("Attempting to match each line of an input string with '$':")
match = Regex.Match(input, pattern, RegexOptions.Multiline)
Do While match.Success
Console.Write("The {0} played in the {1} in",
match.Groups(1).Value, match.Groups(4).Value)
For Each capture As Capture In match.Groups(5).Captures
Console.Write(capture.Value)
Next
Console.WriteLine(".")
match = match.NextMatch()
Loop
Console.WriteLine()
pattern = basePattern + "\r?$"
Console.WriteLine("Attempting to match each line of an input string with '\r?$':")
match = Regex.Match(input, pattern, RegexOptions.Multiline)
Do While match.Success
Console.Write("The {0} played in the {1} in",
match.Groups(1).Value, match.Groups(4).Value)
For Each capture As Capture In match.Groups(5).Captures
Console.Write(capture.Value)
Next
Console.WriteLine(".")
match = match.NextMatch()
Loop
Console.WriteLine()
End Sub
End Module
' The example displays the following output:
' Attempting to match the entire input string:
'
' Attempting to match each element in a string array:
' The Brooklyn Dodgers played in the National League in 1911, 1912, 1932-1957.
' The Chicago Cubs played in the National League in 1903-present.
' The Detroit Tigers played in the American League in 1901-present.
' The New York Giants played in the National League in 1885-1957.
' The Washington Senators played in the American League in 1901-1960.
'
' Attempting to match each line of an input string with '$':
'
' Attempting to match each line of an input string with '\r?$':
' The Brooklyn Dodgers played in the National League in 1911, 1912, 1932-1957.
' The Chicago Cubs played in the National League in 1903-present.
' The Detroit Tigers played in the American League in 1901-present.
' The New York Giants played in the National League in 1885-1957.
' The Washington Senators played in the American League in 1901-1960.
Только начало строки: \A
Привязка \A указывает, что совпадение должно происходить в начале входной строки. Он идентичен привязке ^ , за исключением того, что \A игнорирует RegexOptions.Multiline параметр. Таким образом, он может соответствовать только началу первой строки во многострочной входной строке.
Следующий пример аналогичен примерам для привязок ^ и $. Он использует привязку \A в регулярном выражении, которое извлекает информацию о годах, в течение которых существовали некоторые профессиональные бейсбольные команды. Входная строка содержит пять строк. Вызов Regex.Matches(String, String, RegexOptions) метода находит только первую подстроку во входной строке, которая соответствует шаблону регулярного выражения. Как показано в примере, Multiline параметр не действует.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string input = "Brooklyn Dodgers, National League, 1911, 1912, 1932-1957\n" +
"Chicago Cubs, National League, 1903-present\n" +
"Detroit Tigers, American League, 1901-present\n" +
"New York Giants, National League, 1885-1957\n" +
"Washington Senators, American League, 1901-1960\n";
string pattern = @"\A((\w+(\s?)){2,}),\s(\w+\s\w+),(\s\d{4}(-(\d{4}|present))?,?)+";
Match match = Regex.Match(input, pattern, RegexOptions.Multiline);
while (match.Success)
{
Console.Write("The {0} played in the {1} in",
match.Groups[1].Value, match.Groups[4].Value);
foreach (Capture capture in match.Groups[5].Captures)
Console.Write(capture.Value);
Console.WriteLine(".");
match = match.NextMatch();
}
Console.WriteLine();
}
}
// The example displays the following output:
// The Brooklyn Dodgers played in the National League in 1911, 1912, 1932-1957.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim input As String = "Brooklyn Dodgers, National League, 1911, 1912, 1932-1957" + vbCrLf +
"Chicago Cubs, National League, 1903-present" + vbCrLf +
"Detroit Tigers, American League, 1901-present" + vbCrLf +
"New York Giants, National League, 1885-1957" + vbCrLf +
"Washington Senators, American League, 1901-1960" + vbCrLf
Dim pattern As String = "\A((\w+(\s?)){2,}),\s(\w+\s\w+),(\s\d{4}(-(\d{4}|present))?,?)+"
Dim match As Match = Regex.Match(input, pattern, RegexOptions.Multiline)
Do While match.Success
Console.Write("The {0} played in the {1} in",
match.Groups(1).Value, match.Groups(4).Value)
For Each capture As Capture In match.Groups(5).Captures
Console.Write(capture.Value)
Next
Console.WriteLine(".")
match = match.NextMatch()
Loop
Console.WriteLine()
End Sub
End Module
' The example displays the following output:
' The Brooklyn Dodgers played in the National League in 1911, 1912, 1932-1957.
Конец строки или перед окончанием новой строки: \Z
Привязка \Z указывает, что совпадение должно происходить в конце входной строки или до \n конца входной строки. Он идентичен привязке $ , за исключением того, что \Z игнорирует RegexOptions.Multiline параметр. Таким образом, в многострочной строке это требование может быть удовлетворено только в конце последней строки или последней строке до \n.
Обратите внимание, что \Z удовлетворено \n , но не удовлетворено \r\n (сочетание символов CR/LF). Для обработки CR/LF, как если бы это было \n, включите \r?\Z в шаблон регулярного выражения. Обратите внимание, что это сделает \r часть матча.
Начиная с .NET 11, вы можете использовать RegexOptions.AnyNewLine, чтобы сделать \Z распознать все распространенные новые последовательности вместо \n. В отличие от \r?\Z обходного решения, AnyNewLine обрабатывает \r\n как атомарную последовательность, поэтому \r не включается в соответствие. Дополнительные сведения см. в режиме AnyNewLine.
В следующем примере используется привязка \Z в регулярном выражении, аналогичном примеру в разделе "Начало строки" или "Линия ", который извлекает сведения о годах, в течение которых существовали некоторые профессиональные бейсбольные команды. Подвыражение \r?\Z в регулярном выражении ^((\w+(\s?)){2,}),\s(\w+\s\w+),(\s\d{4}(-(\d{4}|present))?,?)+\r?\Z выполняется в конце строки, а также в конце строки, которая заканчивается \n или \r\n. В результате каждый элемент в массиве соответствует шаблону регулярного выражения.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string[] inputs = { "Brooklyn Dodgers, National League, 1911, 1912, 1932-1957",
"Chicago Cubs, National League, 1903-present" + Environment.NewLine,
"Detroit Tigers, American League, 1901-present" + Regex.Unescape(@"\n"),
"New York Giants, National League, 1885-1957",
"Washington Senators, American League, 1901-1960" + Environment.NewLine};
string pattern = @"^((\w+(\s?)){2,}),\s(\w+\s\w+),(\s\d{4}(-(\d{4}|present))?,?)+\r?\Z";
foreach (string input in inputs)
{
Console.WriteLine(Regex.Escape(input));
Match match = Regex.Match(input, pattern);
if (match.Success)
Console.WriteLine(" Match succeeded.");
else
Console.WriteLine(" Match failed.");
}
}
}
// The example displays the following output:
// Brooklyn\ Dodgers,\ National\ League,\ 1911,\ 1912,\ 1932-1957
// Match succeeded.
// Chicago\ Cubs,\ National\ League,\ 1903-present\r\n
// Match succeeded.
// Detroit\ Tigers,\ American\ League,\ 1901-present\n
// Match succeeded.
// New\ York\ Giants,\ National\ League,\ 1885-1957
// Match succeeded.
// Washington\ Senators,\ American\ League,\ 1901-1960\r\n
// Match succeeded.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim inputs() As String = {"Brooklyn Dodgers, National League, 1911, 1912, 1932-1957",
"Chicago Cubs, National League, 1903-present" + vbCrLf,
"Detroit Tigers, American League, 1901-present" + vbLf,
"New York Giants, National League, 1885-1957",
"Washington Senators, American League, 1901-1960" + vbCrLf}
Dim pattern As String = "^((\w+(\s?)){2,}),\s(\w+\s\w+),(\s\d{4}(-(\d{4}|present))?,?)+\r?\Z"
For Each input As String In inputs
Console.WriteLine(Regex.Escape(input))
Dim match As Match = Regex.Match(input, pattern)
If match.Success Then
Console.WriteLine(" Match succeeded.")
Else
Console.WriteLine(" Match failed.")
End If
Next
End Sub
End Module
' The example displays the following output:
' Brooklyn\ Dodgers,\ National\ League,\ 1911,\ 1912,\ 1932-1957
' Match succeeded.
' Chicago\ Cubs,\ National\ League,\ 1903-present\r\n
' Match succeeded.
' Detroit\ Tigers,\ American\ League,\ 1901-present\n
' Match succeeded.
' New\ York\ Giants,\ National\ League,\ 1885-1957
' Match succeeded.
' Washington\ Senators,\ American\ League,\ 1901-1960\r\n
' Match succeeded.
Только конец строки: \z
Привязка \z указывает, что совпадение должно происходить в конце входной строки. Как и элемент языка $, \z игнорирует RegexOptions.Multiline параметр.
\Z В отличие от элемента языка, \z не удовлетворяется символом \n в конце строки. Поэтому он может соответствовать только концу входной строки.
В следующем примере используется привязка \z в регулярном выражении, которое в противном случае идентично примеру в предыдущем разделе, которое извлекает сведения о годах, в течение которых существовали некоторые профессиональные бейсбольные команды. Пример пытается сопоставить каждый из пяти элементов в массиве строк с шаблоном ^((\w+(\s?)){2,}),\s(\w+\s\w+),(\s\d{4}(-(\d{4}|present))?,?)+\r?\zрегулярных выражений. Две строки заканчиваются символами возврата каретки и новой строки, одна — символом новой строки, и две не заканчиваются ни символом возврата каретки, ни символом новой строки. Как показано в выходных данных, только строки без возврата каретки или символа канала строки соответствуют шаблону.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string[] inputs = { "Brooklyn Dodgers, National League, 1911, 1912, 1932-1957",
"Chicago Cubs, National League, 1903-present" + Environment.NewLine,
"Detroit Tigers, American League, 1901-present\n",
"New York Giants, National League, 1885-1957",
"Washington Senators, American League, 1901-1960" + Environment.NewLine };
string pattern = @"^((\w+(\s?)){2,}),\s(\w+\s\w+),(\s\d{4}(-(\d{4}|present))?,?)+\r?\z";
foreach (string input in inputs)
{
Console.WriteLine(Regex.Escape(input));
Match match = Regex.Match(input, pattern);
if (match.Success)
Console.WriteLine(" Match succeeded.");
else
Console.WriteLine(" Match failed.");
}
}
}
// The example displays the following output:
// Brooklyn\ Dodgers,\ National\ League,\ 1911,\ 1912,\ 1932-1957
// Match succeeded.
// Chicago\ Cubs,\ National\ League,\ 1903-present\r\n
// Match failed.
// Detroit\ Tigers,\ American\ League,\ 1901-present\n
// Match failed.
// New\ York\ Giants,\ National\ League,\ 1885-1957
// Match succeeded.
// Washington\ Senators,\ American\ League,\ 1901-1960\r\n
// Match failed.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim inputs() As String = {"Brooklyn Dodgers, National League, 1911, 1912, 1932-1957",
"Chicago Cubs, National League, 1903-present" + vbCrLf,
"Detroit Tigers, American League, 1901-present" + vbLf,
"New York Giants, National League, 1885-1957",
"Washington Senators, American League, 1901-1960" + vbCrLf}
Dim pattern As String = "^((\w+(\s?)){2,}),\s(\w+\s\w+),(\s\d{4}(-(\d{4}|present))?,?)+\r?\z"
For Each input As String In inputs
Console.WriteLine(Regex.Escape(input))
Dim match As Match = Regex.Match(input, pattern)
If match.Success Then
Console.WriteLine(" Match succeeded.")
Else
Console.WriteLine(" Match failed.")
End If
Next
End Sub
End Module
' The example displays the following output:
' Brooklyn\ Dodgers,\ National\ League,\ 1911,\ 1912,\ 1932-1957
' Match succeeded.
' Chicago\ Cubs,\ National\ League,\ 1903-present\r\n
' Match failed.
' Detroit\ Tigers,\ American\ League,\ 1901-present\n
' Match failed.
' New\ York\ Giants,\ National\ League,\ 1885-1957
' Match succeeded.
' Washington\ Senators,\ American\ League,\ 1901-1960\r\n
' Match failed.
Смежные совпадения: \G
Привязка \G указывает, что совпадение должно происходить в точке окончания предыдущего совпадения или если предыдущего совпадения не было, в строке, где началось сопоставление. При использовании этой привязки с методом Regex.Matches или Match.NextMatch гарантируется, что все совпадения являются смежными.
Подсказка
Как правило, вы размещаете привязку \G в левом конце шаблона. В редких случаях, когда вы выполняете поиск справа налево, поместите \G привязку на правый конец вашего шаблона.
В следующем примере используется регулярное выражение для извлечения имен видов грызунов из строки с разделителями-запятыми.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string input = "capybara,squirrel,chipmunk,porcupine,gopher," +
"beaver,groundhog,hamster,guinea pig,gerbil," +
"chinchilla,prairie dog,mouse,rat";
string pattern = @"\G(\w+\s?\w*),?";
Match match = Regex.Match(input, pattern);
while (match.Success)
{
Console.WriteLine(match.Groups[1].Value);
match = match.NextMatch();
}
}
}
// The example displays the following output:
// capybara
// squirrel
// chipmunk
// porcupine
// gopher
// beaver
// groundhog
// hamster
// guinea pig
// gerbil
// chinchilla
// prairie dog
// mouse
// rat
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim input As String = "capybara,squirrel,chipmunk,porcupine,gopher," +
"beaver,groundhog,hamster,guinea pig,gerbil," +
"chinchilla,prairie dog,mouse,rat"
Dim pattern As String = "\G(\w+\s?\w*),?"
Dim match As Match = Regex.Match(input, pattern)
Do While match.Success
Console.WriteLine(match.Groups(1).Value)
match = match.NextMatch()
Loop
End Sub
End Module
' The example displays the following output:
' capybara
' squirrel
' chipmunk
' porcupine
' gopher
' beaver
' groundhog
' hamster
' guinea pig
' gerbil
' chinchilla
' prairie dog
' mouse
' rat
Возможные интерпретации регулярного выражения \G(\w+\s?\w*),? показаны в следующей таблице.
| Рисунок | Описание |
|---|---|
\G |
Начните там, где закончился последний матч. |
\w+ |
Найти один или несколько символов слова. |
\s? |
Совпадает с нулём или одним пробелом. |
\w* |
Совпадение с нулем или большим числом буквенных символов. |
(\w+\s?\w*) |
Совпадение одного или нескольких символов слова, за которым следует ноль или один пробел, за которым следует ноль или несколько символов слова. Это первая группа захвата. |
,? |
Соответствует нулю или одному вхождению литерального символа запятой. |
Граница слова: \b
Привязка \b указывает, что совпадение должно происходить на границе между символом слова ( \w элементом языка) и несловным символом ( \W элементом языка). Символы слова состоят из буквенно-цифровых символов и символов подчеркивания. Символ, не являющийся символом слова, — это любой символ, который не является буквенно-цифровым или символом подчеркивания. (Дополнительные сведения см. в разделе "Классы символов".) Совпадение также может происходить на границе слова в начале или конце строки.
Якорь \b часто используется, чтобы убедиться, что подвыражение соответствует целому слову, а не только началу или концу слова. Регулярное выражение \bare\w*\b в следующем примере иллюстрирует это использование. Он соответствует любому слову, которое начинается с подстроки "are". Выходные данные из примера также иллюстрируют, что \b соответствует началу и концу входной строки.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string input = "area bare arena mare";
string pattern = @"\bare\w*\b";
Console.WriteLine("Words that begin with 'are':");
foreach (Match match in Regex.Matches(input, pattern))
Console.WriteLine($"'{match.Value}' found at position {match.Index}");
}
}
// The example displays the following output:
// Words that begin with 'are':
// 'area' found at position 0
// 'arena' found at position 10
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim input As String = "area bare arena mare"
Dim pattern As String = "\bare\w*\b"
Console.WriteLine("Words that begin with 'are':")
For Each match As Match In Regex.Matches(input, pattern)
Console.WriteLine("'{0}' found at position {1}",
match.Value, match.Index)
Next
End Sub
End Module
' The example displays the following output:
' Words that begin with 'are':
' 'area' found at position 0
' 'arena' found at position 10
Возможные интерпретации шаблона регулярного выражения показаны в следующей таблице.
| Рисунок | Описание |
|---|---|
\b |
Начинайте сопоставление на границе слова. |
are |
Найдите подстроку "are". |
\w* |
Совпадение с нулем или большим числом буквенных символов. |
\b |
Совпадение заканчивается на границе слова. |
Не-граница слова: \B
Привязка \B указывает, что совпадение не должно происходить на границе слова. Это противоположность якоря \b.
В следующем примере привязка \B используется, чтобы найти вхождения подстроки "qu" в слове. Шаблон \Bqu\w+ регулярного выражения соответствует подстрокам, начинающимся с "qu", который не запускает слово и продолжается до конца слова.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string input = "equity queen equip acquaint quiet";
string pattern = @"\Bqu\w+";
foreach (Match match in Regex.Matches(input, pattern))
Console.WriteLine($"'{match.Value}' found at position {match.Index}");
}
}
// The example displays the following output:
// 'quity' found at position 1
// 'quip' found at position 14
// 'quaint' found at position 21
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim input As String = "equity queen equip acquaint quiet"
Dim pattern As String = "\Bqu\w+"
For Each match As Match In Regex.Matches(input, pattern)
Console.WriteLine("'{0}' found at position {1}",
match.Value, match.Index)
Next
End Sub
End Module
' The example displays the following output:
' 'quity' found at position 1
' 'quip' found at position 14
' 'quaint' found at position 21
Возможные интерпретации шаблона регулярного выражения показаны в следующей таблице.
| Рисунок | Описание |
|---|---|
\B |
Не начинайте сопоставление на границе слова. |
qu |
Сопоставьте подстроку "qu". |
\w+ |
Найти один или несколько символов слова. |