Основы программирования на C#

       

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


Регулярное выражение на 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



Содержание раздела