Внимание. Если требуется описать в выражении Обычный символ, совпадающий с каким-либо метасимволом, его предваряют обратной косой чертой

Если требуется описать в выражении обычный символ, совпадающий с каким-либо метасимволом, его предваряют обратной косой чертой. Так, для поиска в тексте символа точки следует записать \., а для поиска косой черты — \ \.

Например, для поиска в тексте имени файла cat.doc следует использовать ре­гулярное выражение cat\.doc. Символ «точка» экранируется обратной косой чертой для того, чтобы он воспринимался не как метасимвол «любой символ» (в том числе и точка!), а непосредственно1.

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

(?<имя_переменной>фрагмент_выражения)

Фрагмент текста, совпавший при поиске с фрагментом регулярного выражения, заносится в переменную с заданным именем. Пусть, например, требуется выде­лить из текста номера телефонов, записанных в виде nnn-nn-nn. Регулярное выра­жение для поиска номера можно записать так:

(?<num>\d\d\d-\d\d-\d\d)

Обратите внимание на то, что метасимволы регулярных выражений не совпадают с мета­символами, которые используются в шаблонах имен файлов, таких как *.doc.

При анализе текста в переменную с именем num будут последовательно записы­ваться найденные номера телефонов.

Рассмотрим еще один вариант применения группирования — для формирования обратных ссылок. Все конструкции, заключенные в круглые скобки, автоматиче­ски нумеруются, начиная с 1. Эти номера, предваренные обратной косой чертой, можно использовать для ссылок на соответствующую конструкцию. Например, выражение (\w)\l используется для поиска сдвоенных символов в словах (wall, mass, cooperate) - если написать просто \w\w, будут найдены все пары алфавитно-цифровых символов.

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

(Вася)\s+(должен)\s+(?<sum>\d+)\sруб\.\s+Ну что же ты. \1

В этом выражении три подвыражения, заключенных в скобки. Ссылка на первое из них выполняется в конце выражения. С этим выражением совпадут, напри­мер, фрагменты

Вася должен 5 руб. Ну что же ты. Вася

Вася должен 53459 руб. Ну что же ты. Вася

Выражение, задающее IP-адрес:((\d{l,3}\.){3}\d{1,3})

Адрес состоит из четырех групп цифр, разделенных точками. Каждая группа может включать от одной до трех цифр. Примеры IP-адресов: 212.46.197.69, 212.194.5.106, 209.122.173.160. Первая группа, заключенная в скобки, задает весь адрес. Ей при­сваивается номер 1. В нее вложены вторые скобки, определяющие границы для повторителя {3}.

Переменную, имя которой задается внутри выражения в угловых скобках, также можно использовать для обратных ссылок в последующей части выражения. На­пример, поиск двойных символов в словах можно выполнить с помощью выра­жения (?<s>\w)\k<s>, где s — имя переменной, в которой запоминается символ, \к — элемент синтаксиса.

В регулярное выражение можно помещать комментарии. Поскольку выражения обычно проще писать, чем читать, это — очень полезная возможность. Коммента­рий либо помещается внутрь конструкции (?#), либо располагается, начиная от символа # до конца строки (для распознавания этого вида комментария должен быть включен режим х RegexOptions. IgnorePatternWhitespace).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: