Программирование. Принципы и практика использования C++ Исправленное издание
Шрифт:
23.8.1. Символы и специальные символы
Регулярные выражения определяют шаблон, который можно использовать для сопоставления символов из строки. По умолчанию символ в шаблоне соответствует самому себе в строке. Например, регулярное выражение (шаблон) "abc" соответствует подстроке abc строки Is there an abc here?
Реальная мощь регулярных выражений заключается в специальных символах и сочетаниях символов, имеющих особый смысл в шаблоне.
Например,
соответствует любой строке, состоящей из трех символов, начинающейся с буквы
Обратите внимание на то, что выражения
Если хотите использовать в шаблоне один из специальных символов, вы должны сделать его управляющим, поставив перед ним обратную косую черту; например, символ
23.8.2. Классы символов
Самые распространенные сочетания символов в сжатом виде представлены как специальные символы.
Символы в верхнем регистре означают “не вариант специального символа в нижнем регистре”. В частности, символ \W означает “не буква”, а не “буква в верхнем регистре”.
Элементы третьего столбца (например,
Как и библиотеки
23.8.3. Повторения
Повторяющиеся шаблоны задаются постфиксными операторами.
Например, выражение
Ax*
соответствует символу A, за котором не следует ни одного символа или следует несколько символов x:
A
Ax
Axx
Axxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Если
Ax+
соответствует символу A, за которым следует один или несколько символов x:
Ax
Axx
Axxxxxxxxxxxxxxxxxxxxxxxxxxxxx
но не
A
В общем случае необязательный символ (ни одного или несколько) указывается с помощью знака вопроса. Например, выражение
\d–?\d
соответствует двум цифрам с необязательным дефисом между ними:
1–2
12
но не
1––2
Для задания конкретного количества вхождений или конкретного диапазона вхождений используются фигурные скобки. Например, выражение
\w{2}–\d{4,5}
соответствует только строкам, содержащим две буквы и дефис, за которым следуют четыре или пять цифр:
Ab–1234
XX–54321
22–54321
но не
Ab–123
?b–1234
Да, цифры задаются символами \w.
23.8.4. Группировка
Для того чтобы указать, что некое регулярное выражение является частичным шаблоном (sub-pattern), его следует заключить в круглые скобки. Рассмотрим пример.
(\d*:)
Данное выражение определяет частичный шаблон, не содержащий ни одной или содержащий несколько цифр, за которыми следует двоеточие. Группу можно использовать как часть более сложного шаблона. Рассмотрим пример.
(\d*:)?(\d+)
Данное выражение задает необязательную и, возможно, пустую последовательность цифр, за которыми следуют двоеточие и последовательность из одной или нескольких цифр. Этот лаконичный и точный способ выражения шаблонов изобрели обычные люди!
23.8.5. Варианты
Символ “или” (|) задает альтернативу. Рассмотрим пример.
Subject: (FW:|Re:)?(.*)