Метод System.Text.RegularExpressions.Regex.Match
В этой статье приводятся дополнительные замечания к справочной документации по этому API.
Метод Match(String, Int32) возвращает первую подстроку, которая соответствует шаблону регулярного выражения, начиная с позиции символа или после нее startat
в входной строке. Шаблон регулярного выражения, для которого Match(String, Int32) выполняется поиск метода, определяется вызовом одного из Regex конструкторов классов. Сведения о языковых элементах, используемых для создания шаблона регулярного выражения, см . в кратком справочнике по языку регулярных выражений.
Параметр startat
При необходимости можно указать начальную позицию в строке с помощью startat
параметра. Все совпадения, начиная с начала startat
строки, игнорируются. Если вы не указываете начальную позицию, поиск начинается с позиции по умолчанию, которая является левой частью input
в левой части поиска справа направо, а справа input
— в левом поле поиска. Несмотря на начало startat
, индекс любого возвращаемого совпадения относительно начала строки.
Хотя обработчик регулярных выражений не возвращает совпадения, начиная с начала, startat
он не игнорирует строку до startat
. Это означает, что утверждения, такие как привязки или утверждения lookbehind, по-прежнему применяются к входным данным в целом. Например, следующий код содержит шаблон с утверждением lookbehind, которое удовлетворено, даже если оно происходит до startat
индекса 5 в входной строке.
using System;
using System.Text.RegularExpressions;
namespace Examples
{
public class Example3
{
public static void Main()
{
string input = "Zip code: 98052";
var regex = new Regex(@"(?<=Zip code: )\d{5}");
Match match = regex.Match(input, 5);
if (match.Success)
Console.WriteLine("Match found: {0}", match.Value);
}
}
}
// This code prints the following output:
// Match found: 98052
Совет
- Если шаблон начинается с привязки
^
, ноstartat
больше 0, совпадения никогда не будут найдены в поиске по одной строке, так как они ограничены^
, чтобы начать с индекса 0. - Привязка
\G
удовлетворенаstartat
. Из-за этого, если вы хотите ограничить совпадение таким образом, чтобы оно начиналось точно с определенной позиции символа в строке, привязывая регулярное выражение\G
слева к правому шаблону. Это ограничивает совпадение, поэтому оно должно начинаться точноstartat
(или, если требуется несколько совпадений, поэтому совпадения являются смежными).
Поиск справа налево
Поиск справа налево, то есть при построении шаблона регулярного выражения с RegexOptions.RightToLeft параметром ведет себя следующим образом:
- Сканирование перемещается в противоположном направлении и шаблон сопоставляется с задней (справа) на передний (слева).
- Начальная позиция по умолчанию — это правый конец входной строки.
- Если
startat
задано, проверка справа налево начинается с символа вstartat
1 (неstartat
). \G
Если привязка указана в правом конце шаблона, она ограничивает (первое) совпадение точно вstartat
1.
Дополнительные сведения о поиске справа налево см . в режиме справа налево.
Определение того, найден ли совпадение
Вы можете определить, найден ли шаблон регулярного выражения в входной строке, проверка значение свойства возвращаемого Match объектаSuccess. Если совпадение найдено, свойство возвращаемого Match объекта Value содержит подстроку из input
этого шаблона регулярного выражения. Если совпадение не найдено, его значение равно String.Empty.
Первый или несколько совпадений
Этот метод возвращает первую подстроку, найденную в позиции символа startat
или после нее, input
соответствующей шаблону регулярного выражения. Последующие совпадения можно получить, многократно вызвав метод возвращаемого Match объекта Match.NextMatch . Вы также можете получить все совпадения в одном вызове Regex.Matches(String, Int32) метода, вызвав метод.
Исключения по тайм-ауту
RegexMatchTimeoutException Исключение возникает, если время выполнения операции сопоставления превышает интервал времени ожидания, указанный конструкторомRegex.Regex(String, RegexOptions, TimeSpan). Если при вызове конструктора не задан интервал времени ожидания, исключение возникает, если операция превышает любое время ожидания, установленное для домена приложения, в котором Regex создается объект. Если время ожидания не определено в Regex вызове конструктора или в свойствах домена приложения или если значение времени ожидания не Regex.InfiniteMatchTimeoutзадано, исключение не возникает.