Элементы языка регулярных выражений — краткий справочник

Регулярное выражение – это шаблон, который обработчик регулярных выражений пытается сопоставить с введенным текстом. Шаблон состоит из односимвольных или многосимвольных литералов, операторов или конструкций. См. краткое описание регулярных выражений .NET.

В каждом разделе этого краткого справочника приводится перечень конкретной категории символов, операторов и конструкций, которые можно использовать для задания регулярных выражений.

Мы также представили эту информацию в двух форматах, чтобы вы могли ее скачать и распечатать для справки:

Escape-знаки

Обратная косая черта (\) в регулярных выражениях указывает, что следующий за ней символ либо является специальным знаком (как показано в следующей таблице), либо должен интерпретироваться буквально. Дополнительные сведения см. в разделе Escape-символы.

Escape-символ Описание Шаблон Число соответствий
\a Соответствует знаку колокольчика, \u0007. \a "\u0007" в "Error!" + '\u0007'
\b В классе символов соответствует знаку BACKSPACE, \u0008. [\b]{3,} "\b\b\b\b" в "\b\b\b\b"
\t Соответствует знаку табуляции, \u0009. (\w+)\t "item1\t", "item2\t" в "item1\titem2\t"
\r Соответствует знаку возврата каретки, \u000D. (\r не эквивалентен знаку начала новой строки, \n.) \r\n(\w+) "\r\nThese" в "\r\nThese are\ntwo lines."
\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\nThese" в "\r\nThese are\ntwo lines."
\e Соответствует escape-знаку, \u001B. \e "\x001B" в "\x001B"
\ nnn Использует восьмеричное представление для указания символа (nnn состоит из двух или трех цифр). \w\040\w "a b", "c d" в "a bc d"
\x nn Использует шестнадцатеричное представление для указания символа (nn состоит ровно из двух цифр). \w\x20\w "a b", "c d" в "a bc d"
\c X

\c x
Соответствует управляющему символу ASCII, который задан как X или x, где X или x является буквой управляющего символа. \cC "\x0003" в "\x0003" (Ctrl-C)
\u nnnn Совпадение со знаком Юникода в шестнадцатеричном представлении (строго четыре цифры, представленные как nnnn). \w\u0020\w "a b", "c d" в "a bc d"
\ Если за этим знаком следует символ, не распознанный как escape-символ из этой и других таблиц данной темы, то соответствует в точности этому символу. Например, \* — это то же самое, что и \x2A, а \. — то же самое, что и \x2E. Это позволяет обработчику регулярных выражений распознавать языковые элементы (такие как *или ?) и символьные литералы (представленные как \* или \?). \d+[\+-x\*]\d+ "2+2" и "3*9" в "(2+2) * 3*9"

Классы символов

Класс символов соответствует какому-либо одному набору символов. Классы символов состоят из языковых элементов, приведенных в следующей таблице. Дополнительные сведения см. в разделе Классы символов.

Класс знаков Описание Шаблон Число соответствий
[ character_group ] Соответствует любому одиночному символу, входящему в character_group. По умолчанию при сопоставлении учитывается регистр. [ae] "a" в "gray"

"a", "e" в "lane"
[^ character_group ] Отрицание: соответствует любому одиночному символу, не входящему в character_group. По умолчанию символы в character_group чувствительны к регистру. [^aei] "r", "g", "n" в "reign"
[ first - last ] Диапазон символов: соответствует одному символу в диапазоне от первого до последнего. [A-Z] "A", "B" в "AB123"
. Подстановочный знак: соответствует любому одиночному символу, кроме \n.

Для сопоставления символа точки (. или \u002E) перед ней нужно поставить дополнительную обратную косую черту (\.).
a.e "ave" в "nave"

"ate" в "water"
\p{ имя } Соответствует любому одиночному символу в общей категории Юникода или в именованном блоке, указанном в параметре имя. \p{Lu}

\p{IsCyrillic}
"C", "L" в "City Lights"

"Д", "Ж" в "ДЖem"
\P{ имя } Соответствует любому одиночному символу, не входящему в общую категорию Юникода или в именованный блок, указанный в параметре имя. \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 в конце строки. В многострочном режиме соответствие должно обнаруживаться до конца линии или перед символом \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 theme", "them them" в "them theme them them"
\B Соответствие не должно обнаруживаться на границе \b. \Bend\w*\b "ends", "ender" в "end sends endure lender"

Конструкции группирования

Конструкции группирования отображают части выражений регулярных выражений и обычно захватывают части строки входной строки. Конструкции группирования состоят из языковых элементов, приведенных в следующей таблице. Для получения дополнительной информации см. Конструкции группирования.

Конструкция группирования Описание Шаблон Число соответствий
( subexpression ) Захватывает соответствующую часть выражения и назначает ей порядковый номер, отсчитываемый от единицы. (\w)\1 "ee" в "deep"
(?< name > subexpression )
или
(?' name ' subexpression )
Выделяет соответствующую часть выражения в именованную группу. (?<double>\w)\k<double> "ee" в "deep"
(?< name1 - name2 > subexpression )
или
(?' name1 - name2 ' subexpression )
Задает сбалансированное определение группы. Дополнительные сведения см. в разделе "Сбалансированное определение группы" статьи Конструкции группирования. (((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*(?(Open)(?!))$ "((1-3)*(3-1))" в "3+2^((1-3)*(3-1))"
(?: subexpression ) Определяет невыделяемую группу. Write(?:Line)? "WriteLine" в "Console.WriteLine()"

"Write" в "Console.Write(value)"
(?imnsx-imnsx: subexpression ) Применяет или отключает указанные параметры в части выражения. Для получения дополнительной информации см. Параметры регулярных выражений. A\d{2}(?i:\w+)\b "A12xl", "A12XL" в "A12xl A12XL a12xl"
(?= subexpression ) Утверждение положительного просмотра вперед нулевой ширины. \w+(?=\.) "is", "ran" и "out" в "He is. The dog ran. The sun is out."
(?! subexpression ) Утверждение отрицательного просмотра вперед нулевой ширины. \b(?!un)\w+\b "sure", "used" в "unsure sure unity used"
(?<= subexpression ) Утверждение положительного просмотра назад нулевой ширины. (?<=19)\d{2}\b "99", "50", "05" в "1851 1999 1950 1905 2003"
(?<! subexpression ) Утверждение отрицательного просмотра назад нулевой ширины. (?<!19)\d{2}\b "51", "03" в "1851 1999 1950 1905 2003"
(?> subexpression ) Атомарная группа. [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. Для получения дополнительной информации см. Конструкции обратных ссылок.

Конструкция обратных ссылок Описание Шаблон Число соответствий
\ число Обратная ссылка. Соответствует значению нумерованной части выражения. (\w)\1 "ee" в "seek"
\k< имя > Именованная обратная ссылка. Соответствует значению именованного выражения. (?<char>\w)\k<char> "ee" в "seek"

Конструкции чередования

Конструкции изменения модифицируют регулярное выражение, включая сопоставление по принципу "либо-либо". Такие конструкции состоят из языковых элементов, приведенных в следующей таблице. Дополнительные сведения см. в разделе Конструкции чередования.

Конструкция изменения Описание Шаблон Число соответствий
| Соответствует любому элементу, разделенному вертикальной чертой (|). th(e|is|at) "the", "this" в "this is the day."
(?( expression ) yes | no ) Соответствует да в случае соответствия шаблона регулярного выражения, определяемого выражением; в противном случае соответствует дополнительной части нет. Выражение интерпретируется как утверждение нулевой ширины. (?(A)A\d{2}\b|\b\d{3}\b) "A10", "910" в "A10 C103 910"
(?( name ) yes | no ) Соответствует да в случае соответствия именованной или нумерованной группы захвата имя; в противном случае соответствует дополнительной части нет. (?<quoted>")?(?(quoted).+?"|\S+\s) "Dogs.jpg ", "\"Yiska playing.jpg\"" в "Dogs.jpg \"Yiska playing.jpg\""

Подстановки

Подстановки — это языковые элементы регулярных выражений, которые поддерживаются в шаблонах замены. Для получения дополнительной информации см. Подстановки. Приведенные в следующей таблице метасимволы являются атомарными утверждениями нулевой ширины.

Знак Описание Шаблон Шаблон замены Входная строка Результирующая строка
$ число Замещает часть строки, соответствующую группе число. \b(\w+)(\s)(\w+)\b $3$2$1 "one two" "two one"
${ имя } Замещает часть строки, соответствующую именованной группе имя. \b(?<word1>\w+)(\s)(?<word2>\w+)\b ${word2} ${word1} "one two" "two one"
$$ Подставляет литерал "$". \b(\d+)\s?USD $$$1 "103 USD" "$103"
$& Замещает копией полного соответствия. \$?\d*\.?\d+ **$&** "$1.30" "**$1.30**"
$` Замещает весь текст входной строки до соответствия. B+ $` "AABBCC" "AAAACC"
$' Замещает весь текст входной строки после соответствия. B+ $' "AABBCC" "AACCCC"
$+ Замещает последнюю захваченную группу. B+(C+) $+ "AABBCCDD" "AACCDD"
$_ Замещает всю входную строку. B+ $_ "AABBCC" "AAAABBCCCC"

Параметры регулярных выражений

Можно определить параметры, управляющие интерпретацией шаблона регулярного выражения обработчиком регулярных выражений. Многие из этих параметров можно указать в шаблоне регулярного выражения либо в виде одной или нескольких констант RegexOptions. Этот краткий справочник перечисляет только встраиваемые параметры. Дополнительные сведения о встроенных параметрах и параметрах RegexOptions см. в статье Параметры регулярных выражений.

Встроенный параметр можно задать двумя способами:

  • С помощью прочих конструкций (?imnsx-imnsx), где минус (-) перед параметром или набором параметров отключает эти параметры. Например, (?i-mn) включает сопоставление без учета регистра (i), отключает многострочный режим (m) и отключает захват неименованных групп (n). Параметр применяется к шаблону регулярного выражения от точки, в которой определен параметр, и действует либо до конца шаблона, либо до точки, в которой другая конструкция отменяет параметр.
  • С помощью конструкции группирования(?imnsx-imnsx:часть выражения), которая определяет параметры для только для указанной группы.

Механизм регулярных выражений .NET поддерживает следующие встроенные параметры:

Параметр Описание Шаблон Число соответствий
i Использовать соответствие без учета регистра. \b(?i)a(?-i)a\w+\b "aardvark", "aaaAuto" в "aardvark AAAuto aaaAuto Adam breakfast"
m Использовать многострочный режим. ^ и $ соответствуют началу и концу строки (line), а не началу и концу строки (string). Пример см. в подразделе "Многострочный режим" раздела Параметры регулярных выражений.
n Не захватывать неименованные группы. Пример см. в подразделе "Только явные захваты" раздела Параметры регулярных выражений.
s Использовать однострочный режим. Пример см. в подразделе "Однострочный режим" раздела Параметры регулярных выражений.
x Игнорировать знаки пробела в шаблоне регулярного выражения, не преобразованные в escape-последовательность. \b(?x) \d+ \s \w+ "1 aardvark", "2 cats" в "1 aardvark 2 cats IV centurions"

Прочие конструкции

Прочие конструкции либо изменяют шаблон регулярных выражений, либо предоставляют сведения о нем. В следующей таблице перечислены все прочие конструкции, поддерживаемые .NET. Для получения дополнительной информации см. Прочие конструкции.

Конструкция Определение Пример
(?imnsx-imnsx) Устанавливает или отключает такие параметры, как учет регистра в середине шаблона. Дополнительные сведения см. в статье Параметры регулярных выражений. \bA(?i)b\w+\b соответствует "ABA", "Able" в "ABA Able Act"
(?# comment ) Встроенное примечание. Примечание заканчивается первой закрывающей скобкой. \bA(?#Matches words starting with A)\w+\b
# [до конца строки] Комментарий режима X. Примечание начинается от знака # без обратной косой черты и продолжается до конца строки. (?x)\bA\w+\b#Matches words starting with A

См. также