Метасимволы

Регулярное выражение — это шаблон (образец), по которому выполняется поиск соответствующего ему фрагмента текста. Язык описания регулярных выражений состоит из символов двух видов: обычных и метасимволов. Обычный символ представляет в выражении сам себя, а метасимвол — некоторый класс символов, например любую цифру или букву.

Например, регулярное выражение для поиска в тексте фрагмента «Вася» запи­сывается с помощью четырех обычных символов Вася, а выражение для поиска двух цифр, идущих подряд, состоит из двух метасимволов \d\d.

С помощью комбинаций метасимволов можно описывать сложные шаблоны для поиска. Например, можно описать шаблон для IP-адреса, адреса электронной почты, различных форматов даты, заголовков определенного вида и т. д.

ПРИМЕЧАНИЕ

Синтаксис регулярных выражений.NET в основном позаимствован из языка Perl 5. Неподготовленного человека вид сложного регулярного выражения может привес­ти в замешательство, но при вдумчивом изучении он обязательно почувствует его красоту и очарование. Пожалуй, регулярные выражения более всего напоминают заклинания, по которым волшебным образом преобразуется текст. Ошибка все­го в одном символе делает заклинание бессильным, зато, верно составленное, оно творит чудеса!

В табл. 15.2 описаны наиболее употребительные метасимволы, представляющие собой классы символов.

Метасимволы, перечисленные в табл. 15.3, уточняют позицию в строке, в кото­рой следует искать совпадение с регулярным выражением, например, только в на­чале или в конце строки. Эти метасимволы являются мнимыми, то есть в тексте им не соответствует никакой реальный символ.

Таблица 15.2. Классы символов

Класс символов Описание Пример
. Любой символ, кроме \n Выражение С. t cсоответствует
    фрагментам cat, cut, clt, c{t и т. д.
[] Любой одиночный символ из последовательности, записанной внутри скобок. Допускается использование диапазонов символов Выражение c[aul]t соответствует фрагментам cat, cut и clt, а выражение c[a-z]t — фрагментам cat, cbt, cct, cdt,..., czt
[^] Любой одиночный символ, не Выражение c[^aul]t
  входящий в последовательность, соответствует фрагментам cbt,
  записанную внутри скобок. c2t, cXt и т. д., а выражение
  Допускается использование c[^a-zA-Z]t — фрагментам C и t,
  диапазонов символов clt, c4t, c3t и т. д.
\w Любой алфавитно-цифровой Выражение c\wt соответствует
  символ, то есть символ из фрагментам cat, cut, clt, cK)t
  множества прописных и строчных и т. д., но не соответствует
  букв и десятичных цифр фрагментам c{t, c;t и т. д.
\W Любой не алфавитно-цифровой Выражение c\Wt соответствует
  символ, то есть символ, фрагментам c{t, C;t, С t и т. д.,
  не входящий в множество но не соответствует фрагментам
  прописных и строчных букв cat, cut, clt, cЮt и т. д.
  и десятичных цифр  
\s Любой пробельный символ, Выражение \s\w\w\w\s
  например символ пробела, соответствует любому слову
  табуляции (\t, \v), перевода из трех букв, окруженному
  строки (\n, \r), новой пробельными символами
  страницы (\f)  
\S Любой не пробельный символ, Выражение \s\S\S\s
  то есть символ, не входящий соответствует любым двум
  в множество пробельных непробельным символам,
    окруженным пробельными
\d Любая десятичная цифра Выражение c\dt соответствует
    фрагментам c1t, c2t,..., c9t
\D Любой символ, не являющийся Выражение c\Dt не соответствует
  десятичной цифрой фрагментам c1t, c2t,..., c9t

Таблица 15.3. Уточняющие метасимволы

Метасимвол Описание
^ Фрагмент, совпадающий с регулярным выражением, следует искать только в начале строки
$ Фрагмент, совпадающий с регулярным выражением, следует искать только в конце строки
Фрагмент, совпадающий с регулярным выражением, следует искать только в начале многострочной строки
\Z Фрагмент, совпадающий с регулярным выражением, следует искать только в конце многострочной строки
\b Фрагмент, совпадающий с регулярным выражением, начинается или заканчивается на границе слова (то есть между символами, соответствующими метасимволам \w и \W)
\B Фрагмент, совпадающий с регулярным выражением, не должен встречаться на границе слова

Например, выражение ^cat соответствует символам cat, встречающимся в начале строки, выражение cat$ — символам cat, встречающимся в конце строки (то есть за ними идет символ перевода строки), а выражение ^$ представляет пустую строку, то есть начало строки, за которым сразу же следует ее конец.

В регулярных выражениях часто используют повторители. Повторители — это метасимволы, которые располагаются непосредственно после обычного символа или класса символов и задают количество его повторений в выражении. Напри­мер, если требуется записать выражение для поиска в тексте пяти идущих под­ряд цифр, вместо метасимволов \d\d\d\d\d можно записать \d{5}. Такому выра­жению будут соответствовать фрагменты 11111, 12345, 53332 и т. д.

Наиболее употребительные повторители перечислены в табл. 15.4.

Таблица 15.4. Повторители

Метасимвол Описание Пример
* Ноль или более повторений предыдущего элемента Выражение ca*t соответствует фрагментам ct, cat, caat, caaaaaaaaaaat и т. д.
+ Одно или более повторений предыдущего элемента Выражение ca+t соответствует фрагментам cat, caat, caaaaaaaaaaat и т. д.
? Ни одного или одно повторение предыдущего элемента Выражение ca?t соответствует фрагментам ct и cat
{n} Ровно n повторений предыдущего элемента Выражение ca{3}t соответствует фрагменту caaat, а выражение (cat){2}— фрагменту catcat (круглые скобки служат для группировки символов)
{n,} По крайней мере n повторений предыдущего элемента Выражение са{3,}t соответствует фрагментам caaat, caaaat, caaaaaaaaaaaat и т. д.
{n,m} От n до m повторений предыдущего элемента Выражение ca{2,4}t соответствует (фрагментам caat. caaat и caaaat.

Помимо рассмотренных элементов регулярных выражений можно использовать конструкцию выбора из нескольких элементов. Варианты выбора перечисляются через вертикальную черту. Например, если требуется определить, присутствует ли в тексте хотя бы один элемент из списка «cat», «dog» и «horse», можно ис­пользовать выражение

cat|dog|horse

При поиске используется так называемый «ленивый» алгоритм, по которому по­иск прекращается при нахождении самого короткого из возможных фрагментов, совпадающих с регулярным выражением.

Примеры простых регулярных выражений:

□ целое число (возможно, со знаком):

[-+]?\d+

□ вещественное число (может иметь знак и дробную часть, отделенную точкой):

[-+]?\d+\.?\d*

□ российский номер автомобиля (упрощенно):

[A-Z]\d{3}[A-Z]{2}\d\dRUS


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



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