Поделиться через


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

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

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

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

Escape-последовательности символов

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

Escape-символ Description Расписание Matches
\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";

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

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

Класс знаков Description Расписание Matches
[ 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), перед ним должен предшествовать escape-символ (\.).
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"

Привязки

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

Assertion Description Расписание Matches
^ По умолчанию соответствие должно начинаться в начале строки. В многострочном режиме соответствие должно начинаться в начале линии. ^\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"

Конструкции группировки в регулярных выражениях

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

Конструкция группирования Description Расписание Matches
( subexpression ) Захватывает соответствующую часть выражения и назначает ей порядковый номер, отсчитываемый от единицы. (\w)\1 "ee" в "deep".
(?< name > subexpression )
или
(?' name ' subexpression )
Выделяет соответствующую часть выражения в именованную группу. (?<double>\w)\k<double> "ee" в "deep".
(?< name1 - name2 > subexpression )
или
(?' name1 - name2 ' subexpression )
Задает сбалансированное определение группы. Дополнительные сведения см. в разделе "Сбалансированное определение группы" статьи Grouping Constructs. (((?'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 ) Применяет или отключает указанные параметры в части выражения. Для получения дополнительной информации см. Regular Expression Options. A\d{2}(?i:\w+)\b "A12xl", "A12XL" в "A12xl A12XL a12xl"
(?= subexpression ) Утверждение положительного просмотра вперед нулевой ширины. \b\w+\b(?=.+and.+) "cats", "dogs"
in
"cats, dogs and some mice."
(?! subexpression ) Утверждение отрицательного просмотра вперед нулевой ширины. \b\w+\b(?!.+and.+) "and", , "some""mice"
in
"cats, dogs and some mice."
(?<= subexpression ) Утверждение положительного просмотра назад нулевой ширины. \b\w+\b(?<=.+and.+)

———————————

\b\w+\b(?<=.+and.*)
"some", "mice"
in
"cats, dogs and some mice."
————————————
"and", , "some""mice"
in
"cats, dogs and some mice."
(?<! subexpression ) Утверждение отрицательного просмотра назад нулевой ширины. \b\w+\b(?<!.+and.+)

———————————

\b\w+\b(?<!.+and.*)
"cats", , "dogs""and"
in
"cats, dogs and some mice."
————————————
"cats", "dogs"
in
"cats, dogs and some mice."
(?> subexpression ) Атомарная группа. "(?>a|ab)c "ac" в"ac"

ничего в"abc"

Обходные пути на первый взгляд

Когда обработчик регулярных выражений попадает в выражение обходного пути, он принимает подстроку, достигающую от текущей позиции до начала (lookbehind) или конца (lookahead) исходной строки, а затем выполняется Regex.IsMatch на этой подстроке с помощью шаблона обходного пути. Успех результата этого субэкспрессии затем определяется тем, является ли это положительным или отрицательным утверждением.

Обходной путь Имя. Функция
(?=check) Положительный lookahead Утверждает, что то, что немедленно следует текущей позиции в строке, является "check"
(?<=check) Положительный внешний вид Утверждает, что то, что непосредственно предшествует текущей позиции в строке, является "check"
(?!check) Отрицательный lookahead Утверждает, что то, что немедленно следует текущей позиции в строке, не является "check"
(?<!check) Отрицательный lookbehind Утверждает, что то, что непосредственно предшествует текущей позиции в строке, не является "check"

После сопоставления атомарные группы не будут повторно оцениваться, даже если оставшаяся часть шаблона завершается ошибкой из-за совпадения. Это может значительно повысить производительность при возникновении квантификаторов в атомарной группе или остальной части шаблона.

Квантификаторы

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

Квантификатор Description Расписание Matches
* Соответствует предыдущему элементу ноль или более раз. a.*c "abcbc" в "abcbc".
+ Соответствует предыдущему элементу один или более раз. "be+" "bee" в "been", "be" в "bent"
? Соответствует предыдущему элементу ноль или один раз. "rai?" "rai" в "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".
*? Предыдущий элемент не повторяется вообще или повторяется, но как можно меньшее число раз. a.*?c "abc" в "abcbc".
+? Предыдущий элемент повторяется один или несколько раз, но как можно меньшее число раз. "be+?" "be" в "been", "be" в "bent"
?? Предыдущий элемент не повторяется или повторяется один раз, но как можно меньшее число раз. "rai??" "ra" в "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. Для получения дополнительной информации см. Backreference Constructs.

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

Alternation Constructs

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

Конструкция изменения Description Расписание Matches
| Соответствует любому элементу, разделенному вертикальной чертой (|). th(e|is|at) "the", "this" в "this is the day."
(?( expression ) yes | no )
или
(?(выражение ) да )
Соответствует да в случае соответствия шаблона регулярного выражения, определяемого выражением; в противном случае соответствует дополнительной части нет. expression интерпретируется как утверждение нулевой ширины.

Чтобы избежать неоднозначности с именованной или нумерованной группой записи, можно при необходимости использовать явное утверждение, как показано ниже.
(?( (?= expression ) ) yes | no )
(?(A)A\d{2}\b|\b\d{3}\b) "A10", "910" в "A10 C103 910"
(?( name ) yes | no )
или
(?(имя ) да )
Соответствует yes в случае соответствия именованной или нумерованной группы захвата name; в противном случае соответствует дополнительному no. (?<quoted>")?(?(quoted).+?"|\S+\s) "Dogs.jpg ", "\"Yiska playing.jpg\"" в "Dogs.jpg \"Yiska playing.jpg\""

Подстановки

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

Символ Description Расписание Шаблон замены Входная строка Результирующая строка
$ число Замещает часть строки, соответствующую группе number. \b(\w+)(\s)(\w+)\b $3$2$1 "one two" "two one"
${ имя } Замещает часть строки, соответствующую именованной группе name. \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:subexpression), которая определяет параметры для только для указанной группы.

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

Вариант Описание Расписание Matches
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

См. также