Классы символов в регулярных выражениях
Класс символов определяет набор символов, любой из которых может присутствовать во входной строке для успешного сопоставления. Язык регулярных выражений в .NET поддерживает следующие классы символов:
Положительные группы символов. Входная строка должна содержать символ из указанного набора. Дополнительные сведения см. в разделе Положительная группа символов.
Отрицательные группы символов. Входная строка не должна содержать символ из указанного набора. Дополнительные сведения см. в разделе Отрицательная группа символов.
Любой символ. Символ
.
(точка) в регулярных выражениях является подстановочным знаком, который соответствует всем символам, кроме\n
. Дополнительные сведения см. в разделе Любой символ.Общая категория Юникода или именованный блок. Входная строка должна содержать символ из определенной категории Юникода или непрерывного диапазона символов Юникода. Дополнительные сведения см. в разделе Категория Юникода или блок Юникода.
Отрицательная общая категория Юникода или именованный блок. Входная строка не должна содержать символ из определенной категории Юникода или непрерывного диапазона символов Юникода. Дополнительные сведения см. в разделе Отрицательная категория Юникода или блок Юникода.
Словообразующий символ. Входная строка может содержать символ, относящийся к любой категории Юникода, соответствующей символам в словах. Дополнительные сведения см. в разделе Словообразующий символ.
Несловообразующий символ. Входная строка может содержать символ, относящийся к любой категории Юникода, не соответствующей словообразующим символам. Дополнительные сведения см. в разделе Несловообразующий символ.
Символ пробела. Входная строка может содержать любой разделитель Юникода, а также любой из множества управляющих символов. Дополнительные сведения см. в разделе Символ пробела.
Символ, не являющийся пробелом. Входная строка может содержать любой символ, кроме пробела. Дополнительные сведения см. в разделе Символ, не являющийся пробелом.
Десятичная цифра. Входная строка может содержать любой набор знаков, классифицируемых как десятичные цифры Юникода. Дополнительные сведения см. в разделе Десятичная цифра.
Недесятичная цифра. Входная строка может содержать любой символ, кроме десятичных цифр Юникода. Дополнительные сведения см. в разделе Десятичная цифра.
Платформа .NET поддерживает выражения вычитания в классах знаков, которые позволяют в результате исключения одного класса знаков из другого класса знаков определить набор знаков. Дополнительные сведения см. в разделе Вычитание класса знаков.
Примечание.
Классы символов, которые сопоставляют символы по категориям, например \w, для соответствия символов слов или \p{} для соответствия категории Юникод, используют класс CharUnicodeInfo для получения сведений о категориях символов. В .NET Framework 4.6.2 и более поздних версий категории символов основаны на стандарте Юникода, версия 8.0.0.
Положительная группа символов: [ ]
Положительная группа символов задает список символов, один из которых должен присутствовать во входной строке для успешного сопоставления. Символы можно задать по отдельности или в виде диапазона.
Синтаксис для указания списка отдельных символов выглядит следующим образом:
[*character_group*]
Здесь character_group — это список отдельных символов, которые могут присутствовать во входной строке для успешного сопоставления. character_group может включать в себя любое сочетание литеральных символов, escape-символов или классов символов.
Синтаксис для указания диапазона символов выглядит следующим образом:
[firstCharacter-lastCharacter]
Здесь firstCharacter — это символ, с которого начинается диапазон, а lastCharacter — символ, которым он заканчивается. Диапазон символов — это непрерывная последовательность знаков, которая задается указанием первого и последнего знака в последовательности и дефиса между ними. Два знака являются смежными, если они имеют соседние кодовые точки в Юникоде. firstCharacter должен быть символом с самой нижней кодовой точкой, а lastCharacter должен быть символом с самой высокой кодовой точкой.
Примечание.
Так как группа положительных символов может включать набор символов и диапазон символов, дефис (-
) всегда интерпретируется как разделитель диапазонов, если только он не является первым или последним символом группы.
Чтобы включить дефис как непериферный член группы символов, побежайте его. Например, чтобы создать группу символов для символа a
и символов из -
/
, правильный синтаксис имеет значение [a\--/]
.
В следующей таблице перечислены некоторые распространенные шаблоны регулярных выражений, содержащие классы положительных символов.
Расписание | Description |
---|---|
[aeiou] |
Соответствует всем гласным. |
[\p{P}\d] |
Соответствует всем знакам препинания и десятичным цифрам. |
[\s\p{P}] |
Соответствует всем символам пробела и знакам препинания. |
В следующем примере определена положительная группа знаков, которая содержит символы "a" и "e", таким образом, чтобы входная строка содержала слова grey или gray и еще одно слово.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"gr[ae]y\s\S+?[\s\p{P}]";
string input = "The gray wolf jumped over the grey wall.";
MatchCollection matches = Regex.Matches(input, pattern);
foreach (Match match in matches)
Console.WriteLine($"'{match.Value}'");
}
}
// The example displays the following output:
// 'gray wolf '
// 'grey wall.'
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "gr[ae]y\s\S+?[\s\p{P}]"
Dim input As String = "The gray wolf jumped over the grey wall."
Dim matches As MatchCollection = Regex.Matches(input, pattern)
For Each match As Match In matches
Console.WriteLine($"'{match.Value}'")
Next
End Sub
End Module
' The example displays the following output:
' 'gray wolf '
' 'grey wall.'
Регулярное выражение gr[ae]y\s\S+?[\s|\p{P}]
определяется следующим образом:
Расписание | Description |
---|---|
gr |
Соответствует буквенным символам "gr". |
[ae] |
Соответствует букве "a" или "e". |
y\s |
Соответствует буквенному символу "y", за которым следует пробел. |
\S+? |
Соответствует одному или нескольким символам, отличным от пробела. |
[\s\p{P}] |
Соответствует символу пробела или знаку препинания. |
В следующем примере выделяются слова, начинающиеся с любой прописной буквы. Вложенное выражение [A-Z]
представляет диапазон прописных букв от A до Z.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\b[A-Z]\w*\b";
string input = "A city Albany Zulu maritime Marseilles";
foreach (Match match in Regex.Matches(input, pattern))
Console.WriteLine(match.Value);
}
}
// The example displays the following output:
// A
// Albany
// Zulu
// Marseilles
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "\b[A-Z]\w*\b"
Dim input As String = "A city Albany Zulu maritime Marseilles"
For Each match As Match In Regex.Matches(input, pattern)
Console.WriteLine(match.Value)
Next
End Sub
End Module
Определение регулярного выражения \b[A-Z]\w*\b
показано в таблице ниже.
Расписание | Description |
---|---|
\b |
Начало на границе слова. |
[A-Z] |
Соответствует любому символу верхнего регистра от А до Z. |
\w* |
Совпадение с нулем или большим числом буквенных символов. |
\b |
Соответствует границе слова. |
Отрицательная группа символов: [^]
Отрицательная группа символов задает список символов, которые не должны присутствовать во входной строке для успешного сопоставления. Символы можно задать по отдельности или в виде диапазона.
Синтаксис для указания списка отдельных символов выглядит следующим образом:
[*^character_group*]
Здесь character_group — это список отдельных символов, которые не могут присутствовать во входной строке для успешного сопоставления. character_group может включать в себя любое сочетание литеральных символов, escape-символов или классов символов.
Синтаксис для указания диапазона символов выглядит следующим образом:
[^*firstCharacter*-*lastCharacter*]
Здесь firstCharacter — это символ, с которого начинается диапазон, а lastCharacter — символ, которым он заканчивается. Диапазон символов — это непрерывная последовательность знаков, которая задается указанием первого и последнего знака в последовательности и дефиса между ними. Два знака являются смежными, если они имеют соседние кодовые точки в Юникоде. firstCharacter должен быть символом с самой нижней кодовой точкой, а lastCharacter должен быть символом с самой высокой кодовой точкой.
Примечание.
Так как группа отрицательных символов может включать набор символов и диапазон символов, дефис (-
) всегда интерпретируется как разделитель диапазонов, если только он не является первым или последним символом группы.
Два или более диапазона знаков могут быть объединены. Например, чтобы задать диапазон десятичных цифр от "0" до "9", диапазон строчных букв от "a" до "f" и диапазон прописных букв от "A" до "F" используйте строку [0-9a-fA-F]
.
Начальный знак вставки (^
) отрицательной группы символов является обязательным и указывает на то, что группа знаков является отрицательной, а не положительной.
Внимание
Отрицательная группа символов в больших шаблонах регулярных выражений не является утверждением нулевой ширины. То есть после оценки отрицательной группы символов обработчик регулярных выражений перемещает один символ во входную строку.
В следующей таблице перечислены некоторые распространенные шаблоны регулярных выражений, содержащие отрицательные группы символов.
Расписание | Description |
---|---|
[^aeiou] |
Соответствует всем символам, кроме гласных. |
[^\p{P}\d] |
Соответствует всем символам, кроме знаков препинания и десятичных цифр. |
Следующий пример соответствует любому слову, начинающемуся с символов "th", за которыми нет символа "o".
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\bth[^o]\w+\b";
string input = "thought thing though them through thus thorough this";
foreach (Match match in Regex.Matches(input, pattern))
Console.WriteLine(match.Value);
}
}
// The example displays the following output:
// thing
// them
// through
// thus
// this
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "\bth[^o]\w+\b"
Dim input As String = "thought thing though them through thus " + _
"thorough this"
For Each match As Match In Regex.Matches(input, pattern)
Console.WriteLine(match.Value)
Next
End Sub
End Module
' The example displays the following output:
' thing
' them
' through
' thus
' this
Определение регулярного выражения \bth[^o]\w+\b
показано в таблице ниже.
Расписание | Description |
---|---|
\b |
Начало на границе слова. |
th |
Соответствует буквенным символам "th". |
[^o] |
Соответствует любому символу, отличающемуся от "o". |
\w+ |
Совпадение с одним или несколькими символами слова. |
\b |
Конец на границе слова. |
Любой символ: .
Символ периода (.) соответствует любому символу, кроме \n
(символа новой строки), со следующими двумя квалификациями:
Если шаблон регулярного выражения изменяется параметром RegexOptions.Singleline или если часть этого шаблона, содержащая класс символов
.
, изменяется параметромs
, то.
соответствует любому символу. Для получения дополнительной информации см. Regular Expression Options.В следующем примере показано различное поведение класса символов
.
по умолчанию и с параметром RegexOptions.Singleline. Регулярное выражение^.+
начинается с начала строки и соответствует любому знаку. По умолчанию совпадение заканчивается в конце первой строки; Шаблон регулярного выражения соответствует возвращаемой символу каретки,\r
но он не соответствует\n
. Поскольку параметр RegexOptions.Singleline интерпретирует всю входную строку как единую строку, он сопоставляет каждый символ в строке ввода, включая\n
.using System; using System.Text.RegularExpressions; public class Example { public static void Main() { string pattern = "^.+"; string input = "This is one line and" + Environment.NewLine + "this is the second."; foreach (Match match in Regex.Matches(input, pattern)) Console.WriteLine(Regex.Escape(match.Value)); Console.WriteLine(); foreach (Match match in Regex.Matches(input, pattern, RegexOptions.Singleline)) Console.WriteLine(Regex.Escape(match.Value)); } } // The example displays the following output: // This\ is\ one\ line\ and\r // // This\ is\ one\ line\ and\r\nthis\ is\ the\ second\.
Imports System.Text.RegularExpressions Module Example Public Sub Main() Dim pattern As String = "^.+" Dim input As String = "This is one line and" + vbCrLf + "this is the second." For Each match As Match In Regex.Matches(input, pattern) Console.WriteLine(Regex.Escape(match.Value)) Next Console.WriteLine() For Each match As Match In Regex.Matches(input, pattern, RegexOptions.SingleLine) Console.WriteLine(Regex.Escape(match.Value)) Next End Sub End Module ' The example displays the following output: ' This\ is\ one\ line\ and\r ' ' This\ is\ one\ line\ and\r\nthis\ is\ the\ second\.
Примечание.
Так как он соответствует любому символу.
, кроме \n
этого, класс символов также соответствует \r
(возвращаемый символ каретки).
Точка в положительной или отрицательной группе символов рассматривается как литеральный символ точки, а не как класс символов. Дополнительные сведения см. в разделах Положительная группа символов и Отрицательная группа символов ранее в этой статье. В следующем примере представлено определение регулярного выражения, содержащее символ точки (
.
) как класс символов и как член положительной группы символов. Регулярное выражение\b.*[.?!;:](\s|\z)
начинается на границе слова, выделяет все символы, пока не встретится один из пяти знаков препинания (включая точку), после чего выделяет символ пробела или конца строки.using System; using System.Text.RegularExpressions; public class Example { public static void Main() { string pattern = @"\b.*[.?!;:](\s|\z)"; string input = "this. what: is? go, thing."; foreach (Match match in Regex.Matches(input, pattern)) Console.WriteLine(match.Value); } } // The example displays the following output: // this. what: is? go, thing.
Imports System.Text.RegularExpressions Module Example Public Sub Main() Dim pattern As STring = "\b.*[.?!;:](\s|\z)" Dim input As String = "this. what: is? go, thing." For Each match As Match In Regex.Matches(input, pattern) Console.WriteLine(match.Value) Next End Sub End Module ' The example displays the following output: ' this. what: is? go, thing.
Примечание.
Поскольку элемент языка .
соответствует любому символу, он часто используется с отложенным квантификатором, если шаблон регулярного выражения пытается несколько раз найти соответствие любому символу. Для получения дополнительной информации см. Квантификаторы.
Категория Юникода или блок Юникода: \p{}
В стандарте Юникода каждому символу присваивается общая категория. Например, определенный символ может быть прописной буквой (категория Lu
), десятичной цифрой (категория Nd
), математическим символом (категория Sm
) или разделителем абзацев (категория Zl
). Определенные наборы символов стандарта Юникод также занимают некоторый диапазон или блок последовательных кодовых точек. Например, базовая латинская кодировка находится в диапазоне от \u0000 до \u007F, а арабская кодировка находится в диапазоне от \u0600 до \u06FF.
Конструкция регулярного выражения
\p{
имя }
соответствует любым символам, которые относятся к общей категории Юникода или именованному блоку, где name — сокращенное название категории или имя блока. Список сокращений категорий см. в подразделе Поддерживаемые общие категории Юникода далее в этом разделе. Список именованных блоков см. в подразделе Поддерживаемые именованные блоки далее в этом разделе.
Совет
Сопоставление может быть улучшено, если строка сначала нормализуется путем вызова String.Normalize метода.
В примере ниже конструкция \p{
name}
используется для выделения общей категории Юникода (в данном случае Pd
, т. е. категории знаков препинания и тире) и именованного блока (IsGreek
и IsBasicLatin
).
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\b(\p{IsGreek}+(\s)?)+\p{Pd}\s(\p{IsBasicLatin}+(\s)?)+";
string input = "Κατα Μαθθαίον - The Gospel of Matthew";
Console.WriteLine(Regex.IsMatch(input, pattern)); // Displays True.
}
}
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "\b(\p{IsGreek}+(\s)?)+\p{Pd}\s(\p{IsBasicLatin}+(\s)?)+"
Dim input As String = "Κατα Μαθθαίον - The Gospel of Matthew"
Console.WriteLine(Regex.IsMatch(input, pattern)) ' Displays True.
End Sub
End Module
Определение регулярного выражения \b(\p{IsGreek}+(\s)?)+\p{Pd}\s(\p{IsBasicLatin}+(\s)?)+
показано в таблице ниже.
Расписание | Description |
---|---|
\b |
Начало на границе слова. |
\p{IsGreek}+ |
Соответствует одному или нескольким греческим символам. |
(\s)? |
Совпадение с нулем или одним символом пробела. |
(\p{IsGreek}+(\s)?)+ |
Выделяет один или несколько раз шаблон из одного или нескольких греческих символов, за которыми следует ноль или один символ пробела. |
\p{Pd} |
Соответствует знакам препинания и тире. |
\s |
Соответствует пробелу. |
\p{IsBasicLatin}+ |
Соответствует одному или нескольким базовым латинским символам. |
(\s)? |
Совпадение с нулем или одним символом пробела. |
(\p{IsBasicLatin}+(\s)?)+ |
Выделяет один или несколько раз шаблон из одного или нескольких базовых латинских символов, за которыми следует ноль или один символ пробела. |
Отрицательная категория Юникода или блок Юникода: \P{}
В стандарте Юникода каждому символу присваивается общая категория. Например, определенный символ может быть прописной буквой (категория Lu
), десятичной цифрой (категория Nd
), математическим символом (категория Sm
) или разделителем абзацев (категория Zl
). Определенные наборы символов стандарта Юникод также занимают некоторый диапазон или блок последовательных кодовых точек. Например, базовая латинская кодировка находится в диапазоне от \u0000 до \u007F, а арабская кодировка находится в диапазоне от \u0600 до \u06FF.
Конструкция регулярного выражения
\P{
имя }
соответствует любым символам, которые не относятся к общей категории Юникода или именованному блоку, где name — сокращенное название категории или имя блока. Список сокращений категорий см. в подразделе Поддерживаемые общие категории Юникода далее в этом разделе. Список именованных блоков см. в подразделе Поддерживаемые именованные блоки далее в этом разделе.
Совет
Сопоставление может быть улучшено, если строка сначала нормализуется путем вызова String.Normalize метода.
В примере ниже конструкция \P{
name}
используется для удаления любых символов валют (в данном случае Sc
, т. е. категории символов и валют) из числовых строк.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"(\P{Sc})+";
string[] values = { "$164,091.78", "£1,073,142.68", "73¢", "€120" };
foreach (string value in values)
Console.WriteLine(Regex.Match(value, pattern).Value);
}
}
// The example displays the following output:
// 164,091.78
// 1,073,142.68
// 73
// 120
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "(\P{Sc})+"
Dim values() As String = {"$164,091.78", "£1,073,142.68", "73¢", "€120"}
For Each value As String In values
Console.WriteLine(Regex.Match(value, pattern).Value)
Next
End Sub
End Module
' The example displays the following output:
' 164,091.78
' 1,073,142.68
' 73
' 120
Шаблон регулярного выражения (\P{Sc})+
выделяет один или несколько символов, которые не являются символами валют. Это позволяет удалить любой символ валюты из строки результата.
Словообразующий символ: \w
\w
соответствует любому словообразующему символу. Словообразующий символ входит во все категории Юникода, перечисленные в следующей таблице.
Категория | Description |
---|---|
Ll | Буква: строчные буквы |
Lu | Буква: прописные буквы |
Lt | Буква: заглавный регистр |
Lo | Буква: другие |
Lm | Буква: модификатор |
Mn | Метка: не занимающая место |
Nd | Число: десятичная цифра |
Pc | Пунктуация, соединитель. Эта категория включает десять символов, наиболее часто используемым из которых является знак подчеркивания (_), u+005F. |
Если задано поведение, совместимое с ECMAScript, то параметр \w
эквивалентен [a-zA-Z_0-9]
. Информацию о регулярных выражениях ECMAScript см. в подразделе "Поведение сопоставления ECMAScript" раздела Параметры регулярных выражений.
Примечание.
Так как элемент языка \w
соответствует любому словообразующему символу, он часто используется с отложенным квантификатором, если шаблон регулярного выражения пытается несколько раз найти соответствие любому словообразующему символу, за которым следует определенный словообразующий символ. Для получения дополнительной информации см. Квантификаторы.
В примере ниже элемент языка \w
используется для выделения повторяющихся символов в слове. В примере определяется шаблон регулярного выражения (\w)\1
, который можно интерпретировать указанным ниже образом.
Элемент | Description |
---|---|
(\w) | Соответствует словообразующему символу. Это первая группа записи. |
\1 | Соответствует значению первой записи. |
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"(\w)\1";
string[] words = { "trellis", "seer", "latter", "summer",
"hoarse", "lesser", "aardvark", "stunned" };
foreach (string word in words)
{
Match match = Regex.Match(word, pattern);
if (match.Success)
Console.WriteLine("'{0}' found in '{1}' at position {2}.",
match.Value, word, match.Index);
else
Console.WriteLine("No double characters in '{0}'.", word);
}
}
}
// The example displays the following output:
// 'll' found in 'trellis' at position 3.
// 'ee' found in 'seer' at position 1.
// 'tt' found in 'latter' at position 2.
// 'mm' found in 'summer' at position 2.
// No double characters in 'hoarse'.
// 'ss' found in 'lesser' at position 2.
// 'aa' found in 'aardvark' at position 0.
// 'nn' found in 'stunned' at position 3.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "(\w)\1"
Dim words() As String = {"trellis", "seer", "latter", "summer", _
"hoarse", "lesser", "aardvark", "stunned"}
For Each word As String In words
Dim match As Match = Regex.Match(word, pattern)
If match.Success Then
Console.WriteLine("'{0}' found in '{1}' at position {2}.", _
match.Value, word, match.Index)
Else
Console.WriteLine("No double characters in '{0}'.", word)
End If
Next
End Sub
End Module
' The example displays the following output:
' 'll' found in 'trellis' at position 3.
' 'ee' found in 'seer' at position 1.
' 'tt' found in 'latter' at position 2.
' 'mm' found in 'summer' at position 2.
' No double characters in 'hoarse'.
' 'ss' found in 'lesser' at position 2.
' 'aa' found in 'aardvark' at position 0.
' 'nn' found in 'stunned' at position 3.
Несловообразующий символ: \W
\W
соответствует любому несловообразующему символу. Элемент языка \W эквивалентен следующему классу символов:
[^\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}]
Другими словами, он соответствует любому символу, за исключением символов в категории Юникода, перечисленных в следующей таблице.
Категория | Description |
---|---|
Ll | Буква: строчные буквы |
Lu | Буква: прописные буквы |
Lt | Буква: заглавный регистр |
Lo | Буква: другие |
Lm | Буква: модификатор |
Mn | Метка: не занимающая место |
Nd | Число: десятичная цифра |
Pc | Пунктуация, соединитель. Эта категория включает десять символов, наиболее часто используемым из которых является знак подчеркивания (_), u+005F. |
Если задано поведение, совместимое с ECMAScript, то параметр \W
эквивалентен [^a-zA-Z_0-9]
. Информацию о регулярных выражениях ECMAScript см. в подразделе "Поведение сопоставления ECMAScript" раздела Параметры регулярных выражений.
Примечание.
Так как элемент языка \W
соответствует любому несловообразующему символу, он часто используется с отложенным квантификатором, если шаблон регулярного выражения пытается несколько раз найти соответствие любому несловообразующему символу, за которым следует определенный несловообразующий символ. Для получения дополнительной информации см. Квантификаторы.
В примере ниже показан класс символов \W
. Он определяет шаблон регулярного выражения \b(\w+)(\W){1,2}
, выделяющий слово, за которым следует один или два несловообразующих символа, например пробелы или знаки препинания. Возможные интерпретации регулярного выражения показаны в следующей таблице.
Элемент | Description |
---|---|
\b | Совпадение должно начинаться на границе слова. |
(\w+) | Совпадение с одним или несколькими символами слова. Это первая группа записи. |
(\W){1,2} | Выделяет несловообразующий символ один или два раза. Это вторая группа записи. |
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\b(\w+)(\W){1,2}";
string input = "The old, grey mare slowly walked across the narrow, green pasture.";
foreach (Match match in Regex.Matches(input, pattern))
{
Console.WriteLine(match.Value);
Console.Write(" Non-word character(s):");
CaptureCollection captures = match.Groups[2].Captures;
for (int ctr = 0; ctr < captures.Count; ctr++)
Console.Write(@"'{0}' (\u{1}){2}", captures[ctr].Value,
Convert.ToUInt16(captures[ctr].Value[0]).ToString("X4"),
ctr < captures.Count - 1 ? ", " : "");
Console.WriteLine();
}
}
}
// The example displays the following output:
// The
// Non-word character(s):' ' (\u0020)
// old,
// Non-word character(s):',' (\u002C), ' ' (\u0020)
// grey
// Non-word character(s):' ' (\u0020)
// mare
// Non-word character(s):' ' (\u0020)
// slowly
// Non-word character(s):' ' (\u0020)
// walked
// Non-word character(s):' ' (\u0020)
// across
// Non-word character(s):' ' (\u0020)
// the
// Non-word character(s):' ' (\u0020)
// narrow,
// Non-word character(s):',' (\u002C), ' ' (\u0020)
// green
// Non-word character(s):' ' (\u0020)
// pasture.
// Non-word character(s):'.' (\u002E)
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "\b(\w+)(\W){1,2}"
Dim input As String = "The old, grey mare slowly walked across the narrow, green pasture."
For Each match As Match In Regex.Matches(input, pattern)
Console.WriteLine(match.Value)
Console.Write(" Non-word character(s):")
Dim captures As CaptureCollection = match.Groups(2).Captures
For ctr As Integer = 0 To captures.Count - 1
Console.Write("'{0}' (\u{1}){2}", captures(ctr).Value, _
Convert.ToUInt16(captures(ctr).Value.Chars(0)).ToString("X4"), _
If(ctr < captures.Count - 1, ", ", ""))
Next
Console.WriteLine()
Next
End Sub
End Module
' The example displays the following output:
' The
' Non-word character(s):' ' (\u0020)
' old,
' Non-word character(s):',' (\u002C), ' ' (\u0020)
' grey
' Non-word character(s):' ' (\u0020)
' mare
' Non-word character(s):' ' (\u0020)
' slowly
' Non-word character(s):' ' (\u0020)
' walked
' Non-word character(s):' ' (\u0020)
' across
' Non-word character(s):' ' (\u0020)
' the
' Non-word character(s):' ' (\u0020)
' narrow,
' Non-word character(s):',' (\u002C), ' ' (\u0020)
' green
' Non-word character(s):' ' (\u0020)
' pasture.
' Non-word character(s):'.' (\u002E)
Поскольку объект Group для второй группы записи содержит только один захваченный несловообразующий символ, в примере извлекаются все захваченные несловообразующие символы из объекта CaptureCollection, который возвращается свойством Group.Captures.
Символ пробела: \s
\s
соответствует любому символу пробела. Это эквивалентно управляющим последовательностям и категориям Юникода, перечисленным в следующей таблице.
Категория | Description |
---|---|
\f |
Символ перевода страницы, \u000C. |
\n |
Символ новой строки, \u000A. |
\r |
Символ возврата каретки, \u000D. |
\t |
Символ табуляции, \u0009. |
\v |
Символ вертикальной табуляции, \u000B. |
\x85 |
Символ NEXT LINE (NEL) \u0085. |
\p{Z} |
Соответствует всем символам разделителя. Включает категории Zs , Zl и Zp . |
Если задано поведение, совместимое с ECMAScript, то параметр \s
эквивалентен [ \f\n\r\t\v]
. Информацию о регулярных выражениях ECMAScript см. в подразделе "Поведение сопоставления ECMAScript" раздела Параметры регулярных выражений.
В примере ниже показан класс символов \s
. Он определяет шаблон регулярного выражения \b\w+(e)?s(\s|$)
, выделяющий слово, заканчивающееся на "s" или "es", за которым следует знак пробела или конец входной строки. Возможные интерпретации регулярного выражения показаны в следующей таблице.
Элемент | Description |
---|---|
\b | Совпадение должно начинаться на границе слова. |
\w+ | Совпадение с одним или несколькими символами слова. |
(e)? | Выделяет "e" ноль или один раз. |
s | Выделяет "s". |
(\s|$) | Совпадает с символом пробела или концом входной строки. |
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\b\w+(e)?s(\s|$)";
string input = "matches stores stops leave leaves";
foreach (Match match in Regex.Matches(input, pattern))
Console.WriteLine(match.Value);
}
}
// The example displays the following output:
// matches
// stores
// stops
// leaves
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "\b\w+(e)?s(\s|$)"
Dim input As String = "matches stores stops leave leaves"
For Each match As Match In Regex.Matches(input, pattern)
Console.WriteLine(match.Value)
Next
End Sub
End Module
' The example displays the following output:
' matches
' stores
' stops
' leaves
Символ, не являющийся пробелом: \S
\S
соответствует любому символу, не являющемуся пробелом. Он эквивалентен шаблону регулярного выражения [^\f\n\r\t\v\x85\p{Z}]
или противоположному шаблону, эквивалентному \s
, выделяющему символы пробела. Дополнительные сведения см. в разделе Символ пробела: \s.
Если задано поведение, совместимое с ECMAScript, то параметр \S
эквивалентен [^ \f\n\r\t\v]
. Информацию о регулярных выражениях ECMAScript см. в подразделе "Поведение сопоставления ECMAScript" раздела Параметры регулярных выражений.
В примере ниже показан элемент языка \S
. Шаблон регулярного выражения \b(\S+)\s?
выделяет строки, разделенные символами пробела. Второй элемент в объекте GroupCollection содержит совпадающую строку. Возможные интерпретации регулярного выражения показаны в следующей таблице.
Элемент | Description |
---|---|
\b |
Совпадение должно начинаться на границе слова. |
(\S+) |
Соответствует одному или нескольким символам, которые не являются пробелами. Это первая группа записи. |
\s? |
Совпадение с нулем или одним символом пробела. |
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"\b(\S+)\s?";
string input = "This is the first sentence of the first paragraph. " +
"This is the second sentence.\n" +
"This is the only sentence of the second paragraph.";
foreach (Match match in Regex.Matches(input, pattern))
Console.WriteLine(match.Groups[1]);
}
}
// The example displays the following output:
// This
// is
// the
// first
// sentence
// of
// the
// first
// paragraph.
// This
// is
// the
// second
// sentence.
// This
// is
// the
// only
// sentence
// of
// the
// second
// paragraph.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "\b(\S+)\s?"
Dim input As String = "This is the first sentence of the first paragraph. " + _
"This is the second sentence." + vbCrLf + _
"This is the only sentence of the second paragraph."
For Each match As Match In Regex.Matches(input, pattern)
Console.WriteLine(match.Groups(1))
Next
End Sub
End Module
' The example displays the following output:
' This
' is
' the
' first
' sentence
' of
' the
' first
' paragraph.
' This
' is
' the
' second
' sentence.
' This
' is
' the
' only
' sentence
' of
' the
' second
' paragraph.
Десятичная цифра: \d
\d
соответствует любой десятичной цифре. Он эквивалентен шаблону регулярного выражения \p{Nd}
, который включает стандартные десятичные цифры 0–9, а также десятичные цифры из некоторых других наборов символов.
Если задано поведение, совместимое с ECMAScript, то параметр \d
эквивалентен [0-9]
. Информацию о регулярных выражениях ECMAScript см. в подразделе "Поведение сопоставления ECMAScript" раздела Параметры регулярных выражений.
В примере ниже показан элемент языка \d
. Проверяет, представляет ли входная строка допустимый телефонный номер в США и Канаде. Шаблон регулярного выражения ^(\(?\d{3}\)?[\s-])?\d{3}-\d{4}$
определяется, как показано в следующей таблице.
Элемент | Description |
---|---|
^ |
Начало совпадения в начале входной строки. |
\(? |
Выделяет ноль или один символ "(". |
\d{3} |
Совпадение с тремя десятичными цифрами. |
\)? |
Выделяет ноль или один символ ")". |
[\s-] |
Выделяет дефис или пробел. |
(\(?\d{3}\)?[\s-])? |
Выделяет несколько раз необязательные открывающие скобки с последующими тремя десятичными цифрами, необязательную закрывающую скобку, а также знак пробела или дефис (если они есть). Это первая группа записи. |
\d{3}-\d{4} |
Выделяет три десятичных цифры, следующий за ними дефис и еще четыре десятичные цифры. |
$ |
Соответствует концу входной строки. |
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"^(\(?\d{3}\)?[\s-])?\d{3}-\d{4}$";
string[] inputs = { "111 111-1111", "222-2222", "222 333-444",
"(212) 111-1111", "111-AB1-1111",
"212-111-1111", "01 999-9999" };
foreach (string input in inputs)
{
if (Regex.IsMatch(input, pattern))
Console.WriteLine(input + ": matched");
else
Console.WriteLine(input + ": match failed");
}
}
}
// The example displays the following output:
// 111 111-1111: matched
// 222-2222: matched
// 222 333-444: match failed
// (212) 111-1111: matched
// 111-AB1-1111: match failed
// 212-111-1111: matched
// 01 999-9999: match failed
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "^(\(?\d{3}\)?[\s-])?\d{3}-\d{4}$"
Dim inputs() As String = {"111 111-1111", "222-2222", "222 333-444", _
"(212) 111-1111", "111-AB1-1111", _
"212-111-1111", "01 999-9999"}
For Each input As String In inputs
If Regex.IsMatch(input, pattern) Then
Console.WriteLine(input + ": matched")
Else
Console.WriteLine(input + ": match failed")
End If
Next
End Sub
End Module
' The example displays the following output:
' 111 111-1111: matched
' 222-2222: matched
' 222 333-444: match failed
' (212) 111-1111: matched
' 111-AB1-1111: match failed
' 212-111-1111: matched
' 01 999-9999: match failed
Символ, не являющийся цифрой: \D
\D
соответствует любому символу, не являющемуся цифрой. Он эквивалентен шаблону регулярного выражения \P{Nd}
.
Если задано поведение, совместимое с ECMAScript, то параметр \D
эквивалентен [^0-9]
. Информацию о регулярных выражениях ECMAScript см. в подразделе "Поведение сопоставления ECMAScript" раздела Параметры регулярных выражений.
В следующем примере показан элемент языка \D. Он проверяет, включает ли строка (например, номер продукта) соответствующее сочетание десятичных и недесятичных символов. Шаблон регулярного выражения ^\D\d{1,5}\D*$
определяется, как показано в следующей таблице.
Элемент | Description |
---|---|
^ |
Начало совпадения в начале входной строки. |
\D |
Выделяет любой символ, не являющийся цифрой. |
\d{1,5} |
Выделяет от одной до пяти десятичных цифр. |
\D* |
Выделяет нуль, одну или несколько недесятичных цифр. |
$ |
Соответствует концу входной строки. |
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"^\D\d{1,5}\D*$";
string[] inputs = { "A1039C", "AA0001", "C18A", "Y938518" };
foreach (string input in inputs)
{
if (Regex.IsMatch(input, pattern))
Console.WriteLine(input + ": matched");
else
Console.WriteLine(input + ": match failed");
}
}
}
// The example displays the following output:
// A1039C: matched
// AA0001: match failed
// C18A: matched
// Y938518: match failed
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim pattern As String = "^\D\d{1,5}\D*$"
Dim inputs() As String = {"A1039C", "AA0001", "C18A", "Y938518"}
For Each input As String In inputs
If Regex.IsMatch(input, pattern) Then
Console.WriteLine(input + ": matched")
Else
Console.WriteLine(input + ": match failed")
End If
Next
End Sub
End Module
' The example displays the following output:
Поддерживаемые общие категории Юникода
В Юникоде определяются общие категории, приведенные в следующей таблице. Дополнительные сведения см. в подразделах "Формат файла UCD" и "Общие значения категорий" в базе данных символов Юникода с. 5.7.1, таблица 12.
Категория | Description |
---|---|
Lu |
Буква: прописные буквы |
Ll |
Буква: строчные буквы |
Lt |
Буква: заглавный регистр |
Lm |
Буква: модификатор |
Lo |
Буква: другие |
L |
Все буквенные символы. Включает символы Lu , Ll , Lt , Lm и Lo |
Mn |
Метка: не занимающая место |
Mc |
Метка: комбинированная |
Me |
Метка: вложенная |
M |
Все сочетания меток. Включает категории Mn , Mc и Me . |
Nd |
Число: десятичная цифра |
Nl |
Число: буква |
No |
Число: другое |
N |
Все числа. Включает категории Nd , Nl и No . |
Pc |
Пунктуация: соединитель |
Pd |
Пунктуация: тире |
Ps |
Пунктуация: открывающий знак пунктуации |
Pe |
Пунктуация: закрывающий знак пунктуации |
Pi |
Пунктуация: открывающая кавычка (в зависимости от использования поведение может быть аналогичным Ps или Pe) |
Pf |
Пунктуация: закрывающая кавычка (в зависимости от использования поведение может быть аналогичным Ps или Pe) |
Po |
Пунктуация: другие знаки пунктуации |
P |
Все знаки препинания. Включает категории Pc , Pd , Ps , Pe , Pi , Pf и Po . |
Sm |
Символ: математический |
Sc |
Символ денежной единицы |
Sk |
Символ: модификатор |
So |
Символ: другие |
S |
Все символы. Включает категории Sm , Sc , Sk и So . |
Zs |
Разделитель: пробел |
Zl |
Разделитель: строка |
Zp |
Разделитель: абзац |
Z |
Все знаки разделения. Включает категории Zs , Zl и Zp . |
Cc |
Другое: управляющий символ |
Cf |
Другое: формат |
Cs |
Другое: заменяющий символ |
Co |
Другое: индивидуальное использование |
Cn |
Другие, не назначенные или неназначаемые |
C |
Все остальные символы. Включает категории Cc , Cf , Cs , Co и Cn . |
Можно определить категорию Юникода для любого отдельного символа, передав его в метод GetUnicodeCategory. В следующем примере метод GetUnicodeCategory используется для определения категории каждого элемента в массиве, содержащем выбранные латинские символы.
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
char[] chars = { 'a', 'X', '8', ',', ' ', '\u0009', '!' };
foreach (char ch in chars)
Console.WriteLine("'{0}': {1}", Regex.Escape(ch.ToString()),
Char.GetUnicodeCategory(ch));
}
}
// The example displays the following output:
// 'a': LowercaseLetter
// 'X': UppercaseLetter
// '8': DecimalDigitNumber
// ',': OtherPunctuation
// '\ ': SpaceSeparator
// '\t': Control
// '!': OtherPunctuation
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim chars() As Char = {"a"c, "X"c, "8"c, ","c, " "c, ChrW(9), "!"c}
For Each ch As Char In chars
Console.WriteLine("'{0}': {1}", Regex.Escape(ch.ToString()), _
Char.GetUnicodeCategory(ch))
Next
End Sub
End Module
' The example displays the following output:
' 'a': LowercaseLetter
' 'X': UppercaseLetter
' '8': DecimalDigitNumber
' ',': OtherPunctuation
' '\ ': SpaceSeparator
' '\t': Control
' '!': OtherPunctuation
Поддерживаемые именованные блоки
Платформа .NET предоставляет именованные блоки, перечисленные в следующей таблице. Набор поддерживаемых именованных блоков составлен на основе Юникода версии 4.0 и Perl версии 5.6. Регулярное выражение, использующее именованные блоки, см. в разделе "Категория Юникода" или блок Юникода: \p{} .
Диапазон кодовых точек | Имя блока |
---|---|
0000 - 007F | IsBasicLatin |
0080 - 00FF | IsLatin-1Supplement |
0100 - 017F | IsLatinExtended-A |
0180 - 024F | IsLatinExtended-B |
0250 - 02AF | IsIPAExtensions |
02B0 - 02FF | IsSpacingModifierLetters |
0300 - 036F | IsCombiningDiacriticalMarks |
0370 - 03FF | IsGreek –или– IsGreekandCoptic |
0400 - 04FF | IsCyrillic |
0500 - 052F | IsCyrillicSupplement |
0530 - 058F | IsArmenian |
0590 - 05FF | IsHebrew |
0600 - 06FF | IsArabic |
0700 - 074F | IsSyriac |
0780 - 07BF | IsThaana |
0900 - 097F | IsDevanagari |
0980 - 09FF | IsBengali |
0A00 - 0A7F | IsGurmukhi |
0A80 - 0AFF | IsGujarati |
0B00 - 0B7F | IsOriya |
0B80 - 0BFF | IsTamil |
0C00 - 0C7F | IsTelugu |
0C80 - 0CFF | IsKannada |
0D00 - 0D7F | IsMalayalam |
0D80 - 0DFF | IsSinhala |
0E00 - 0E7F | IsThai |
0E80 - 0EFF | IsLao |
0F00 - 0FFF | IsTibetan |
1000 - 109F | IsMyanmar |
10A0 - 10FF | IsGeorgian |
1100 - 11FF | IsHangulJamo |
1200 - 137F | IsEthiopic |
13A0 - 13FF | IsCherokee |
1400 - 167F | IsUnifiedCanadianAboriginalSyllabics |
1680 - 169F | IsOgham |
16A0 - 16FF | IsRunic |
1700 - 171F | IsTagalog |
1720 - 173F | IsHanunoo |
1740 - 175F | IsBuhid |
1760 - 177F | IsTagbanwa |
1780 - 17FF | IsKhmer |
1800 - 18AF | IsMongolian |
1900 - 194F | IsLimbu |
1950 - 197F | IsTaiLe |
19E0 - 19FF | IsKhmerSymbols |
1D00 - 1D7F | IsPhoneticExtensions |
1E00 - 1EFF | IsLatinExtendedAdditional |
1F00 - 1FFF | IsGreekExtended |
2000 - 206F | IsGeneralPunctuation |
2070 - 209F | IsSuperscriptsandSubscripts |
20A0 - 20CF | IsCurrencySymbols |
20D0 - 20FF | IsCombiningDiacriticalMarksforSymbols –или– IsCombiningMarksforSymbols |
2100 - 214F | IsLetterlikeSymbols |
2150 - 218F | IsNumberForms |
2190 - 21FF | IsArrows |
2200 - 22FF | IsMathematicalOperators |
2300 - 23FF | IsMiscellaneousTechnical |
2400 - 243F | IsControlPictures |
2440 - 245F | IsOpticalCharacterRecognition |
2460 - 24FF | IsEnclosedAlphanumerics |
2500 - 257F | IsBoxDrawing |
2580 - 259F | IsBlockElements |
25A0 - 25FF | IsGeometricShapes |
2600 - 26FF | IsMiscellaneousSymbols |
2700 - 27BF | IsDingbats |
27C0 - 27EF | IsMiscellaneousMathematicalSymbols-A |
27F0 - 27FF | IsSupplementalArrows-A |
2800 - 28FF | IsBraillePatterns |
2900 - 297F | IsSupplementalArrows-B |
2980 - 29FF | IsMiscellaneousMathematicalSymbols-B |
2A00 - 2AFF | IsSupplementalMathematicalOperators |
2B00 - 2BFF | IsMiscellaneousSymbolsandArrows |
2E80 - 2EFF | IsCJKRadicalsSupplement |
2F00 - 2FDF | IsKangxiRadicals |
2FF0 - 2FFF | IsIdeographicDescriptionCharacters |
3000 - 303F | IsCJKSymbolsandPunctuation |
3040 - 309F | IsHiragana |
30A0 - 30FF | IsKatakana |
3100 - 312F | IsBopomofo |
3130 - 318F | IsHangulCompatibilityJamo |
3190 - 319F | IsKanbun |
31A0 - 31BF | IsBopomofoExtended |
31F0 - 31FF | IsKatakanaPhoneticExtensions |
3200 - 32FF | IsEnclosedCJKLettersandMonths |
3300 - 33FF | IsCJKCompatibility |
3400 - 4DBF | IsCJKUnifiedIdeographsExtensionA |
4DC0 - 4DFF | IsYijingHexagramSymbols |
4E00 - 9FFF | IsCJKUnifiedIdeographs |
A000 - A48F | IsYiSyllables |
A490 - A4CF | IsYiRadicals |
AC00 - D7AF | IsHangulSyllables |
D800 - DB7F | IsHighSurrogates |
DB80 - DBFF | IsHighPrivateUseSurrogates |
DC00 - DFFF | IsLowSurrogates |
E000 - F8FF | IsPrivateUse или IsPrivateUseArea |
F900 - FAFF | IsCJKCompatibilityIdeographs |
FB00 - FB4F | IsAlphabeticPresentationForms |
FB50 - FDFF | IsArabicPresentationForms-A |
FE00 - FE0F | IsVariationSelectors |
FE20 - FE2F | IsCombiningHalfMarks |
FE30 - FE4F | IsCJKCompatibilityForms |
FE50 - FE6F | IsSmallFormVariants |
FE70 - FEFF | IsArabicPresentationForms-B |
FF00 - FFEF | IsHalfwidthandFullwidthForms |
FFF0 - FFFF | IsSpecials |
Вычитание класса символов: [базовая_группа - [исключенная_группа]]
Класс знаков определяет набор знаков. Результатом вычитания класса знаков является набор знаков, полученный в результате исключения одного класса знаков из другого класса знаков.
Выражение вычитания класса знаков имеет следующий вид:
[
base_group -[
excluded_group ]]
Квадратные скобки ([]
) и дефис (-
) являются обязательными. base_group представляет собой положительную или отрицательную группу символов. Компонент excluded_group — это другая положительная или отрицательная группа символов или другое выражение вычитания класса символов (то есть можно осуществлять вложение выражений вычитания класса символов).
Например, предположим, что имеется базовая группа, состоящая из диапазона знаков от "а" до "z". Чтобы задать набор знаков, состоящий из базовой группы за исключением знака "m", используйте команду [a-z-[m]]
. Чтобы задать набор знаков, состоящий из базовой группы за исключением знаков "d", "j", и "p", используйте команду [a-z-[djp]]
. Чтобы определить набор знаков, состоящий из базовой группы за исключением диапазона знаков от "m" до "p", используйте команду [a-z-[m-p]]
.
Рассмотрим вложенное выражение вычитания классов знаков [a-z-[d-w-[m-o]]]
. Вычисление выражения начинается из самого внутреннего диапазона знаков. Сначала диапазон знаков от "m" до "o" вычитается из диапазона знаков от "d" до "w", в результате чего остается набор знаков от "d" до "i" и от "p" до "w". Затем этот набор вычитается из диапазона знаков от "a" до "z", вследствие чего получается набор знаков [abcmnoxyz]
.
При вычитании класса знаков можно использовать любой класс знаков. Чтобы определить набор символов, состоящий из всех символов Юникода от \u0000 до \uFFFF, за исключением пробела (\s
), знаков препинания в общей категории (\p{P}
), символов в именованном блоке IsGreek
(\p{IsGreek}
) и управляющего символа Юникода "следующая строка" (\x85), используйте [\u0000-\uFFFF-[\s\p{P}\p{IsGreek}\x85]]
.
Выберите классы знаков для выражения вычитания класса знаков, которое возвратит полезные результаты. Избегайте выражений, в результате которых возвращается пустой набор знаков, который ничему не соответствует, и выражений, эквивалентных исходной базовой группе. Например, пустой набор является результатом выражения [\p{IsBasicLatin}-[\x00-\x7F]]
, которое вычитает все символы диапазона IsBasicLatin
из общей категории IsBasicLatin
. Аналогично, результатом выражения [a-z-[0-9]]
является исходная базовая группа. Это происходит из-за того, что базовая группа, которая является диапазоном букв от "a" до "z", не содержит знаков исключаемой группы, которая является диапазоном десятичных цифр от "0" до "9".
В следующем примере определяется регулярное выражение ^[0-9-[2468]]+$
, которое выделяет ноль и нечетные цифры во входной строке. Возможные интерпретации регулярного выражения показаны в следующей таблице.
Элемент | Description |
---|---|
^ | Соответствие должно обнаруживаться в начале входной строки. |
[0-9-[2468]]+ |
Соответствует одному или нескольким вхождениям любого символа от 0 до 9, за исключением 2, 4, 6 и 8. Другими словами, выделяется одно или несколько вхождений нуля или нечетной цифры. |
$ | Совпадение должно заканчиваться в конце входной строки. |
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string[] inputs = { "123", "13579753", "3557798", "335599901" };
string pattern = @"^[0-9-[2468]]+$";
foreach (string input in inputs)
{
Match match = Regex.Match(input, pattern);
if (match.Success)
Console.WriteLine(match.Value);
}
}
}
// The example displays the following output:
// 13579753
// 335599901
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim inputs() As String = {"123", "13579753", "3557798", "335599901"}
Dim pattern As String = "^[0-9-[2468]]+$"
For Each input As String In inputs
Dim match As Match = Regex.Match(input, pattern)
If match.Success Then Console.WriteLine(match.Value)
Next
End Sub
End Module
' The example displays the following output:
' 13579753
' 335599901