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

Регулярное выражение – это шаблон, который обработчик регулярных выражений пытается сопоставить с введенным текстом. Шаблон состоит из односимвольных или многосимвольных литералов, операторов или конструкций. Краткое введение см. в разделе Регулярные выражения в .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

Regex

Основные понятия

Регулярные выражения в .NET Framework

Классы регулярных выражений

Другие ресурсы

Рекомендации по использованию регулярных выражений в .NET Framework

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