boost::regex
и ее эквивалент, принятый Комитетом по стандартизации (WG21 TR1). boost::regex
23.8.1. Символы и специальные символы
Регулярные выражения определяют шаблон, который можно использовать для сопоставления символов из строки. По умолчанию символ в шаблоне соответствует самому себе в строке. Например, регулярное выражение (шаблон) "abc
" соответствует подстроке abc строки Is there an abc here?Реальная мощь регулярных выражений заключается в специальных символах и сочетаниях символов, имеющих особый смысл в шаблоне.
Например, выражение
x.y
соответствует любой строке, состоящей из трех символов, начинающейся с буквы x
y
, например xxy
, x3y
и xay
, но не yxy
, 3xy
или xy
.Обратите внимание на то, что выражения {...}
*
, +
и ?
являются постфиксными операторами. Например, выражение \d+ означает “одна или несколько десятичных цифр”.Если хотите использовать в шаблоне один из специальных символов, вы должны сделать его управляющим, поставив перед ним обратную косую черту; например, символ +
\+
— это знак “плюс”.23.8.2. Классы символов
Самые распространенные сочетания символов в сжатом виде представлены как специальные символы.
Символы в верхнем регистре означают “не вариант специального символа в нижнем регистре”. В частности, символ \W
означает “не буква”, а не “буква в верхнем регистре”.Элементы третьего столбца (например, [[:digit:]]
Как и библиотеки string
iostream
, библиотека regex
может обрабатывать большие наборы символов, такие как Unicode. Как и в случае библиотек string
и iostream
, мы просто упоминаем об этом, чтобы при необходимости читатели могли самостоятельно найти информацию. Обсуждение манипуляций текстами в кодировке Unicode выходит за рамки рассмотрения нашей книги.23.8.3. Повторения
Повторяющиеся шаблоны задаются постфиксными операторами.
Например, выражение
Ax*
соответствует символу A
, за котором не следует ни одного символа или следует несколько символов x:A
Ax
Axx
Axxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Если мы требуем, чтобы символ x
+
, а не *
. Например, выражение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. Группировка