Синтаксис регулярных выражений

Регулярное выражение на C# задается строковой константой. Это может быть обычная или @-константа. Чаще всего, следует использовать именно @-константу. Дело в том, что символ "\" широко применяется в регулярных выражениях как для записи escape-последовательностей, так и в других ситуациях. Обычные константы в таких случаях будут выдавать синтаксическую ошибку, а @-константы не выдают ошибок и корректно интерпретируют запись регулярного выражения.

Синтаксис регулярного выражения простой формулой не описать, здесь используются набор разнообразных средств:

  • символы и escape-последовательности;
  • символы операций и символы, обозначающие специальные классы множеств;
  • имена групп и обратные ссылки;
  • символы утверждений и другие средства.

Конечно, регулярное выражение может быть совсем простым, например, строка "abc" задает образец поиска, так что при вызове соответствующего метода будут разыскиваться одно или все вхождения подстроки "abc" в искомую строку. Но могут существовать и очень сложно устроенные регулярные выражения. Приведу таблицу, (15.1) в которой дается интерпретация символов в соответствии с их делением на группы. Таблица не полна, в ней отражаются не все группы, а описание группы не содержит всех символов. Она позволяет дать общее представление о синтаксисе, которое будет дополнено большим числом примеров. За деталями придется обращаться к справочной системе, которая, к сожалению, далеко не идеальна для данного раздела.

Повторяю, данная таблица не полна. В ней не отражены, например, такие категории, как подстановки, обратные ссылки, утверждения.

Для приведенных категорий также не дан полный список возможных символов.

Таблица 15.1. Символы, используемые в регулярных выражениях
Символ Интерпретация
  Категория: escape-последовательности
\b При использовании его в квадратных скобках соответствует имволу "обратная косая черта" с кодом - \u0008
\t Соответствует символу табуляции \u0009
\r Соответствует символу возврата каретки \u000D
\n Соответствует символу новой строки \u000A
\e Соответствует символу escape \u001B
\040 Соответствует символу ASCII, заданному кодом до трех цифр в восьмеричной системе
\x20 Соответствует символу ASCII, заданному кодом из двух цифр в шестнадцатиричной системе
\u0020 Соответствует символу Unicode, заданному кодом из четырех цифр в шестнадцатиричной системе
  Категория: подмножества (классы) символов
. Соответствует любому символу, за исключением символа конца строки
[aeiou] Соответствует любому символу из множества, заданного в квадратных скобках
[^aeiou] Отрицание. Соответствует любому символу, за исключением символов, заданных в квадратных скобках
[0-9a-fA-F] Задание диапазона символов, упорядоченных по коду. Так, 0-9 задает любую цифру
\p{name} Соответствует любому символу, заданному множеству с именем name, например, имя Ll задает множество букв латиницы в нижнем регистре. Поскольку все символы разбиты на подмножества, задаваемые категорией Unicode, то в качестве имени можно задавать имя категории
\P{name} Отрицание. Большая буква всегда задает отрицание множества, заданного малой буквой
\w Множество символов, используемых при задании идентификаторов - большие и малые символы латиницы, цифры и знак подчеркивания
\s Соответствует символам белого пробела
\d Соответствует любому символу из множества цифр
  Категория: Операции (модификаторы)
* Итерация. Задает ноль или более соответствий; например, \w* или
(abc)*. Аналогично, {0,}
+ Положительная итерация. Задает одно или более соответствий; например, \w+ или (abc)+. Аналогично, {1,}
? Задает ноль или одно соответствие; например, \w? или (abc)?. Аналогично, {0,1}
{n} Задает в точности n соответствий; например, \w{2}
{n,} Задает, по меньшей мере, n соответствий; например, (abc){2,}
{n,m} Задает, по меньшей мере, n, но не более m соответствий; например, (abc){2,5}
  Категория: Группирование
(?<Name>) При обнаружении соответствия выражению, заданному в круглых скобках, создается именованная группа, которой дается имя Name. Например, (?<tel> \d{7}). При обнаружении последовательности из семи цифр будет создана группа с именем tel
() Круглые скобки разбивают регулярное выражение на группы. Для каждого подвыражения, заключенного в круглые скобки, создается группа, автоматически получающая номер. Номера следуют в обратном порядке, поэтому полному регулярному выражению соответствует группа с номером 0
(?imnsx) Включает или выключает в группе любую из пяти возможных опций. Для выключения опции перед ней ставится знак минус. Например, (?i-s: ) включает опцию i, задающую нечувствительность к регистру, и выключает опцию s - статус single-line




15. Лекция: Регулярные выражения

15.2

Наши рекомендации