Регулярные выражения — это специальные шаблоны, используемые для ука- зания строк, например, при поиске. Регулярные выражения строятся из обычных алфавитно-цифровых символов и метасимволов. Метасимволы по- зволяют адресоваться одновременно к одному или более обычным алфавит- но-цифровым символам.
По историческим причинам регулярные выражения подразделяются на:
r обычные регулярные выражения (basic regexp);
r регулярные выражения с расширенным синтаксисом (extended regexp).
Не все текстовые утилиты, работающие с регулярными выражениями, под- держивают расширенный синтаксис регулярных выражений.
Метасимволы, составляющие регулярные выражения, представлены двумя классами: шаблонами и квантификаторами.
Шаблоны — специальные символы, заменяющие один или более обычных символов.
Квантификаторы — указатели количества вхождений символа или набора сим- волов, находящихся в регулярном выражении непосредственно перед ними.
То есть шаблоны указывают на то, что должно находиться в данном месте искомой строки, а квантификаторы — сколько раз оно должно там встре- чаться.
В табл. 9.1 приведены наиболее общеупотребительные регулярные выражения.
Таблица 9.1. Регулярные выражения
Метасим- вол
Класс
Расширен- ный
Описание
^
Шаблон
Начало строки
$
Шаблон
Конец строки
\<
Шаблон
*
Начало слова
\>
Шаблон
*
Конец слова
.
Шаблон
Любой символ, включая пробел
[]
Шаблон
Набор символов
()
Шаблон
*
Группировка символов
|
Шаблон
*
Инфиксный оператор (или)
*
Квантификатор
Вхождение любое количество раз
+
Квантификатор
*
Вхождение не менее одного раза
?
Квантификатор
*
Вхождение не более одного раза
{n}
Квантификатор
*
Вхождение n раз
{n,}
Квантификатор
*
Вхождение не менее n раз
{n,m}
Квантификатор
*
Вхождение от n до m раз
Помимо перечисленных регулярных выражений имеется несколько расши- ренных их наборов. Например, в языке Perl используется больше регулярных выражений.
Множества символов, задаваемые в квадратных скобках, имеют следующий смысл: в данном месте должен находиться один любой символ из входящих во множество. Например, множество [0-3] включает в себя все числа от нуля до трех, а регулярному выражению ^[0-3]$ удовлетворяют все строки, в ко- торых находится единственный символ — число от нуля до трех (^ — начало строки, $ — конец строки).
Помимо множеств, заданных с помощью перечисления символов в квадрат- ных скобках, существуют заранее определенные классы символов, приведен- ные в табл. 9.2.
Таблица 9.2. Заранее определенные множества символов
Класс
Значение
[:alnum:]
Множество алфавитно-цифровых символов
[:alpha:]
Алфавитные символы
[:blank:]
Пустые символы — пробел и табуляция
[:cntrl:]
Символы с восьмеричными кодами от 000 до 037 и 177
[:digit:]
Десятичные цифры
[:graph:]
Изображаемые символы: алфавитно-цифровые и пунктуация
[:lower:]
Буквы в нижнем регистре
[:print:]
Печатаемые символы: алфавитно-цифровые, пробел и пунктуация
[:space:]
Табуляция, вертикальная табуляция, пробел, перевод строки