Элементы языка регулярных выражений — краткий справочник
Регулярное выражение – это шаблон, который обработчик регулярных выражений пытается сопоставить с введенным текстом. Шаблон состоит из односимвольных или многосимвольных литералов, операторов или конструкций. См. краткое описание регулярных выражений .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" |
[ Первый- Последний] |
Диапазон символов: соответствует любому одному символу в диапазоне от первого до последнего. | [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" |
Привязки
Привязки, или атомарные утверждения нулевой ширины, приводят к успеху или сбою сопоставления, в зависимости от текущей позиции в строке, но не предписывают обработчику перемещаться по строке или обрабатывать символы. Метасимволы, приведенные в следующей таблице, являются привязками. Дополнительные сведения см. в разделе Привязки.
Утверждение | Описание | Шаблон | Число соответствий |
---|---|---|---|
^ |
По умолчанию соответствие должно начинаться в начале строки. В многострочном режиме соответствие должно начинаться в начале линии. | ^\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" |
(?< Имя> Subexpression) или (?' Имя' 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) |
Утверждение положительного просмотра вперед нулевой ширины. | \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) |
Положительный внешний вид | Утверждает, что за текущей позицией в строке следует значение "проверка". |
(?<=check) |
Положительный взгляд сзади | Утверждает, что то, что непосредственно перед текущей позицией в строке является "проверка". |
(?!check) |
Отрицательный внешний вид | Утверждает, что то, что сразу после текущей позиции в строке не является "проверка". |
(?<!check) |
Отрицательный взгляд сзади | Утверждает, что то, что непосредственно перед текущей позицией в строке не является "проверка". |
После сопоставления атомарные группы не будут повторно оцениваться, даже если оставшаяся часть шаблона завершается ошибкой из-за совпадения. Это может значительно повысить производительность, если квантификаторы находятся в атомарной группе или в оставшейся части шаблона.
Квантификаторы
Квантор указывает количество вхождений предшествующего элемента (знака, группы или класса знаков), которое должно присутствовать во входной строке, чтобы было зафиксировано соответствие. Кванторы состоят из языковых элементов, приведенных в следующей таблице. Для получения дополнительной информации см. Квантификаторы.
Квантификатор | Описание | Шаблон | Число соответствий |
---|---|---|---|
* |
Соответствует предыдущему элементу ноль или более раз. | 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, М} |
Предыдущий элемент повторяется как минимум 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, М}? |
Предыдущий элемент повторяется не менее 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." |
(?( Выражение) Да| Нет) или (?( Выражение) Да) |
Соответствует да в случае соответствия шаблона регулярного выражения, определяемого выражением; в противном случае соответствует дополнительной части нет. Выражение интерпретируется как утверждение нулевой ширины. Чтобы избежать неоднозначности с именованной или нумерованной группой захвата, при необходимости можно использовать явное утверждение, например: (?( (?= Выражение) ) Да| Нет) |
(?(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\"" |
Подстановки
Подстановки — это языковые элементы регулярных выражений, которые поддерживаются в шаблонах замены. Для получения дополнительной информации см. Подстановки. Приведенные в следующей таблице метасимволы являются атомарными утверждениями нулевой ширины.
Знак | Описание | Шаблон | Шаблон замены | Входная строка | Результирующая строка |
---|---|---|---|---|---|
$ число |
Замещает часть строки, соответствующую группе число. | \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" |
(?# Комментарий) |
Встроенное примечание. Примечание заканчивается первой закрывающей скобкой. | \bA(?#Matches words starting with A)\w+\b |
# [до конца строки] |
Комментарий режима X. Примечание начинается от знака # без обратной косой черты и продолжается до конца строки. |
(?x)\bA\w+\b#Matches words starting with A |