Элементы языка регулярных выражений
Регулярное выражение – это шаблон, который обработчик регулярных выражений пытается сопоставить с введенным текстом. Шаблон состоит из односимвольных или многосимвольных литералов, операторов или конструкций. Краткое введение см. в разделе Регулярные выражения в .NET Framework.
В каждом разделе этого краткого справочника приводится перечень конкретной категории символов, операторов и конструкций, которые можно использовать для задания регулярных выражений:
Escape-символы
Классы символов
Привязки
Конструкции группирования
Кванторы
Конструкции обратных ссылок
Конструкции изменения
Подстановки
Прочие конструкции
Escape-символы
Обратная косая черта (\) в регулярных выражениях указывает, что следующий за ней символ либо является специальным знаком (как показано в следующей таблице), либо должен интерпретироваться буквально. Дополнительные сведения см. в разделе Escape-знаки.
Escape-символ |
Описание |
Шаблон |
Соответствия |
---|---|---|---|
\a |
Соответствует знаку колокольчика, \u0007. |
\a |
"\u0007" в "Ошибка!" + '\u0007' |
\b |
В классе символов соответствует знаку BACKSPACE, \u0008. |
[\b]{3,} |
"\b\b\b\b" в "\b\b\b\b" |
\t |
Соответствует знаку табуляции, \u0009. |
(\w+)\t |
"элемент1\t", "элемент2\t" в "элемент1\tэлемент2\t" |
\r |
Соответствует знаку возврата каретки, \u000D. (\r не эквивалентен знаку начала новой строки, \n.) |
\r\n(\w+) |
"\r\nЗдесь" в "\r\nЗдесь имеется\nдве строки." |
\v |
Соответствует знаку вертикальной табуляции, \u000B. |
[\v]{2,} |
"\v\v\v" в "\v\v\v" |
\f |
Соответствует знаку перевода страницы, \u000C. |
[\f]{2,} |
"\f\f\f" в "\f\f\f" |
\n |
Соответствует знаку новой строки, \u000A. |
\r\n(\w+) |
"\r\nЗдесь" в "\r\nЗдесь имеется\nдве строки." |
\e |
Соответствует escape-знаку, \u001B. |
\e |
"\x001B" в "\x001B" |
\nnn |
Использует восьмеричное представление для указания символа (в nnn может быть до трех цифр). |
\w\040\w |
"a b", "c d" в "a bc d" |
\xnn |
Использует шестнадцатеричное представление для указания символа (nn состоит ровно из двух цифр). |
\w\x20\w |
"a b", "c d" в "a bc d" |
\cX \cx |
Соответствует управляющему символу ASCII, который задан как X или x, где X или x является буквой управляющего символа. |
\cC |
"\x0003" в "\x0003" (Ctrl-C) |
\unnnn |
Совпадение со знаком Юникода в шестнадцатеричном представлении (строго четыре цифры, представленные как nnnn). |
\w\u0020\w |
"a b", "c d" в "a bc d" |
\ |
Если за этим знаком следует символ, не распознанный как escape-символ из этой и других таблиц данной темы, то соответствует в точности этому символу. Например, \* совпадает с \x2A. Это позволяет обработчику регулярных выражений распознавать языковые элементы (такие как * или ?) и символьные литералы (представленные как \* или \?). |
\d+[\+-x\*]\d+\d+[\+-x\*\d+ |
"2+2" и "3*9" в "(2+2) * 3*9" |
К началу
Классы символов
Класс символов соответствует какому-либо одному набору символов. Классы символов состоят из языковых элементов, приведенных в следующей таблице. Дополнительные сведения см. в разделе Классы знаков.
Класс знаков |
Описание |
Шаблон |
Соответствия |
---|---|---|---|
[группа_символов] |
Соответствует одному символу из группы_символов. По умолчанию при сопоставлении учитывается регистр. |
[ae] |
"a" в "gray" "a", "e" в "lane" |
[^группа_символов] |
Отрицание: соответствует одному символу, не входящему в группу_символов. По умолчанию символы в группе_символов зависят от регистра. |
[^aei] |
"r", "g", "n" в "reign" |
[первый-последний] |
Диапазон символов: соответствует одному символу в диапазоне от первого до последнего. |
[A-Z] |
"A", "B" в "AB123" |
. |
Подстановочный знак: соответствует какому-либо одному знаку, кроме "\n". |
a.e |
"ave" в "nave" "ate" в "water" |
\p{name} |
Соответствует одному символу в общей категории Юникода или в именованном блоке, указанном в параметре имя. |
\p{Lu} \p{IsCyrillic} |
"C", "L" в "City Lights" "Д", "Ж" в "ДЖem" |
\P{name} |
Соответствует одному символу, не входящему в общую категорию Юникода или в именованный блок, указанный в параметре имя. |
\P{Lu} \P{IsCyrillic} |
"i", "t", "y" в "City" "e", "m" в "ДЖem" |
\w |
Соответствует любому алфавитно-цифровому знаку. |
\w |
"I", "D", "A", "1", "3" в "ID A1.3" |
\W |
Соответствует любому символу, не являющемуся буквой. |
\W |
" ", "." в "ID A1.3" |
\s |
Соответствует любому знаку пробела. |
\w\s |
"D " в "ID A1.3" |
\S |
Соответствует любому знаку, не являющемуся пробелом. |
\s\S |
" _" в "int __ctr" |
\d |
Соответствует любой десятичной цифре. |
\d |
"4" в "4 = IV" |
\D |
Совпадение с любым символом, не являющимся десятичной цифрой. |
\D |
" ", "=", " ", "I", "V" в "4 = IV" |
К началу
Привязки
Привязки, или атомарные утверждения нулевой ширины, приводят к успеху или сбою сопоставления, в зависимости от текущей позиции в строке, но не предписывают обработчику перемещаться по строке или обрабатывать символы. Метасимволы, приведенные в следующей таблице, являются привязками. Дополнительные сведения см. в разделе Привязки в регулярных выражениях.
Утверждение |
Описание |
Шаблон |
Соответствия |
---|---|---|---|
^ |
Соответствие должно начинаться в начале строки. |
^\d{3} |
"901-" в "901-333-" |
$ |
Соответствие должно обнаруживаться в конце строки или до символа \n в конце строки. |
-\d{3}$ |
"-333" в "-901-333" |
\A |
Соответствие должно обнаруживаться в начале строки. |
\A\d{3} |
"901" в "901-333-" |
\Z |
Соответствие должно обнаруживаться в конце строки или до символа \n в конце строки. |
-\d{3}\Z |
"-333" в "-901-333" |
\z |
Соответствие должно обнаруживаться в конце строки. |
-\d{3}\z |
"-333" в "-901-333" |
\G |
Соответствие должно обнаруживаться в той точке, где заканчивается предыдущее соответствие. |
\G\(\d\) |
"(1)", "(3)", "(5)" в "(1)(3)(5)[7](9)" |
\b |
Соответствие должно обнаруживаться на границе между символом \w (алфавитно-цифровым) и символом \W (не алфавитно-цифровым). |
\b\w+\s\w+\b |
"them them" в "them theme them them" |
\B |
Соответствие не должно обнаруживаться на границе \b. |
\Bend\w*\b |
"ends", "ender" в "end sends endure lender" |
К началу
Конструкции группирования
Конструкции группирования отображают части выражений регулярных выражений и обычно захватывают части строки входной строки. Конструкции группирования состоят из языковых элементов, приведенных в следующей таблице. Дополнительные сведения см. в разделе Конструкции группирования.
Конструкция группирования |
Описание |
Шаблон |
Соответствия |
---|---|---|---|
(часть_выражения) |
Выделяет соответствующую часть выражения и назначает ей порядковый номер, отсчитываемый от нуля. |
(\w)\1 |
"ee" в "deep" |
(?<имя> часть_выражения) |
Выделяет соответствующую часть выражения в именованную группу. |
(?<double>\w)\k<double> |
"ee" в "deep" |
(?<имя1-имя2> часть_выражения) |
Задает сбалансированное определение группы. Дополнительные сведения см. в подразделе "Сбалансированное определение группы" раздела Конструкции группирования. |
(((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*(?(Open)(?!))$ |
"((1-3)*(3-1))" в "3+2^((1-3)*(3-1))" |
(?: часть_выражения) |
Определяет невыделяемую группу. |
Write(?:Line)? |
"WriteLine" в "Console.WriteLine()" |
(?imnsx-imnsx: часть_выражения) |
Применяет или отключает заданные параметры в части_выражения. Дополнительные сведения см. в разделе Параметры регулярных выражений. |
A\d{2}(?i:\w+)\b |
"A12xl", "A12XL" в "A12xl A12XL a12xl" |
(?= часть_выражения) |
Утверждение положительного просмотра вперед нулевой ширины. |
\w+(?=\.) |
"is", "ran" и "out" в "He is. The dog ran. The sun is out." |
(?! часть_выражения) |
Утверждение отрицательного просмотра вперед нулевой ширины. |
\b(?!un)\w+\b |
"sure", "used" в "unsure sure unity used" |
(?<= часть_выражения) |
Утверждение положительного просмотра назад нулевой ширины. |
(?<=19)\d{2}\b |
"99", "50", "05" в "1851 1999 1950 1905 2003" |
(?<! часть_выражения) |
Утверждение отрицательного просмотра назад нулевой ширины. |
(?<!19)\d{2}\b |
"51", "03" в "1851 1999 1950 1905 2003" |
(?> часть_выражения) |
Часть выражения поиска без возврата (или "жадного" поиска). |
[13579](?>A+B+) |
"1ABB", "3ABB" и "5AB" в "1ABB 3ABBC 5AB 5AC" |
К началу
Кванторы
Квантор указывает количество вхождений предшествующего элемента (знака, группы или класса знаков), которое должно присутствовать во входной строке, чтобы было зафиксировано соответствие. Кванторы состоят из языковых элементов, приведенных в следующей таблице. Дополнительные сведения см. в разделе Кванторы.
Квантификатор |
Описание |
Шаблон |
Соответствия |
---|---|---|---|
* |
Соответствует предыдущему элементу ноль или более раз. |
\d*\. \d |
".0", "19.9", "219.9" |
+ |
Соответствует предыдущему элементу один или более раз. |
"be+" |
"bee" в "been", "be" в "bent" |
? |
Соответствует предыдущему элементу ноль или один раз. |
"rai? n" |
"ran", "rain" |
{n} |
Предыдущий элемент повторяется ровно n раз. |
",\d{3}" |
",043" в "1,043.6", ",876", ",543" и ",210" в "9,876,543,210" |
{n,} |
Предыдущий элемент повторяется минимум n раз. |
"\d{2,}" |
"166", "29", "1930" |
{n,m} |
Предыдущий элемент повторяется минимум n раз, но не более, чем m раз. |
"\d{3,5}" |
"166", "17668" "19302" в "193024" |
*? |
Предыдущий элемент не повторяется вообще или повторяется, но как можно меньшее число раз. |
\d*? \. \d |
".0", "19.9", "219.9" |
+? |
Предыдущий элемент повторяется один или несколько раз, но как можно меньшее число раз. |
"be+?" |
"be" в "been", "be" в "bent" |
?? |
Предыдущий элемент не повторяется или повторяется один раз, но как можно меньшее число раз. |
"rai?? n" |
"ran", "rain" |
{n}? |
Предыдущий элемент повторяется ровно n раз. |
",\d{3}?" |
",043" в "1,043.6", ",876", ",543" и ",210" в "9,876,543,210" |
{n,}? |
Предыдущий элемент повторяется по крайней мере n раз, но как можно меньшее число раз. |
"\d{2,}?" |
"166", "29", "1930" |
{n,m}? |
Предыдущий элемент повторяется не меньше n и не больше m раз, но как можно меньшее число раз. |
"\d{3,5}?" |
"166", "17668" "193", "024" в "193024" |
К началу
Конструкции обратных ссылок
Обратная ссылка позволяет впоследствии идентифицировать ранее найденную соответствующую часть выражения в том же регулярном выражении. В следующей таблице перечислены конструкции обратных ссылок, поддерживаемые регулярными выражениями платформы .NET Framework. Дополнительные сведения см. в разделе Конструкции обратных ссылок.
Конструкция обратных ссылок |
Описание |
Шаблон |
Соответствия |
---|---|---|---|
\number |
Обратная ссылка. Соответствует значению нумерованной части выражения. |
(\w)\1 |
"ee" в "seek" |
\k<name> |
Именованная обратная ссылка. Соответствует значению именованного выражения. |
(?<char>\w)\k<char> |
"ee" в "seek" |
К началу
Конструкции изменения
Конструкции изменения модифицируют регулярное выражение, включая сопоставление по принципу "либо-либо". Такие конструкции состоят из языковых элементов, приведенных в следующей таблице. Дополнительные сведения см. в разделе Конструкции изменения.
Конструкция изменения |
Описание |
Шаблон |
Соответствия |
---|---|---|---|
| |
Соответствует любому элементу, разделенному вертикальной чертой (|). |
th(e|is|at) |
"the", "this" в "this is the day. " |
(?(выражение)да|нет) |
Сопоставляется с частью да, если выражение соответствует; в противном случае сопоставляется с необязательной частью нет. выражение интерпретируется как утверждение нулевой ширины. |
(?(A)A\d{2}\b|\b\d{3}\b) |
"A10", "910" в "A10 C103 910" |
(?(имя)да|нет) |
Сопоставляется с частью да, если названное имя захвата имеет соответствие; в противном случае сопоставляется с необязательной частью нет. |
(?<quoted>")?(?(quoted).+?"|\S+\s) |
Dogs.jpg, "Yiska playing.jpg" в "Dogs.jpg "Yiska playing.jpg"" |
К началу
Подстановки
Подстановки – это языковые элементы регулярных выражений, которые поддерживаются в шаблонах замены. Дополнительные сведения см. в разделе Подстановки. Приведенные в следующей таблице метасимволы являются атомарными утверждениями нулевой ширины.
Знак |
Описание |
Шаблон |
Шаблон замены |
Входная строка |
Результирующая строка |
---|---|---|---|---|---|
$number |
Замещает часть строки, соответствующую группе номер. |
\b(\w+)(\s)(\w+)\b |
$3$2$1 |
"один два" |
"два один" |
${name} |
Замещает часть строки, соответствующую именованной группе имя. |
\b(?<word1>\w+)(\s)(?<word2>\w+)\b |
${word2} ${word1} |
"один два" |
"два один" |
$$ |
Подставляет литерал "$". |
\b(\d+)\s?USD |
$$$1 |
"103 USD" |
"$103" |
$& |
Замещает копией полного соответствия. |
(\$*(\d*(\.+\d+)?){1}) |
**$& |
"$1.30" |
"**$1.30**" |
$` |
Замещает весь текст входной строки до соответствия. |
B+ |
$` |
"AABBCC" |
"AAAACC" |
$' |
Замещает весь текст входной строки после соответствия. |
B+ |
$' |
"AABBCC" |
"AACCCC" |
$+ |
Замещает последнюю захваченную группу. |
B+(C+) |
$+ |
"AABBCCDD" |
AACCDD |
$_ |
Замещает всю входную строку. |
B+ |
$_ |
"AABBCC" |
"AAAABBCCCC" |
К началу
Прочие конструкции
Прочие конструкции либо изменяют шаблон регулярных выражений, либо предоставляют сведения о нем. В следующей таблице перечислены все прочие конструкции, поддерживаемые платформой .NET Framework. Дополнительные сведения см. в разделе Другие конструкции.
Конструкция |
Определение |
Пример |
---|---|---|
(?imnsx-imnsx) |
Устанавливает или отключает такие параметры, как учет регистра в середине шаблона. Дополнительные сведения см. в разделе Параметры регулярных выражений. |
\bA(?i)b\w+\b соответствует "ABA", "Able" в "ABA Able Act" |
(?# примечание) |
Встроенное примечание. Примечание заканчивается первой закрывающей скобкой. |
\bA(?#Matches words starting with A)\w+\b |
# [до конца строки] |
Комментарий режима X. Примечание начинается от знака # без обратной косой черты и продолжается до конца строки. |
(?x)\bA\w+\b#Matches words starting with A |
К началу
См. также
Ссылки
System.Text.RegularExpressions
Основные понятия
Регулярные выражения в .NET Framework
Другие ресурсы
Рекомендации по использованию регулярных выражений в .NET Framework