Программирование. Принципы и практика использования C++ Исправленное издание, стр. 325
: –1234
Следует подчеркнуть несколько важных моментов.
• Мы не дали себя запутать неверно отформатированным кодом ZIP в строке, начинающейся символами ggg (кстати, что в нем неправильно?).
• В строке, содержащей символы zzz, мы нашли только первый код ZIP (мы ищем только один код в строке).
• В строках 5 и 6 мы нашли правильные суффиксы.
• В строке 7 мы нашли код ZIP, скрытый среди символов xxx.
• Мы нашли (к сожалению?) код ZIP, скрытый в строке TX12345–123456.
23.8. Синтаксис регулярных выражений
Мы рассмотрели довольно элементарный пример сравнения регулярных выражений. Настало время рассмотреть регулярные выражения (в форме, использованной в библиотеке
regex
boost::regex
boost::regex23.8.1. Символы и специальные символы
Регулярные выражения определяют шаблон, который можно использовать для сопоставления символов из строки. По умолчанию символ в шаблоне соответствует самому себе в строке. Например, регулярное выражение (шаблон) "abc" соответствует подстроке abc строки Is there an abc here?
Реальная мощь регулярных выражений заключается в специальных символах и сочетаниях символов, имеющих особый смысл в шаблоне.

Например, выражение
x.yсоответствует любой строке, состоящей из трех символов, начинающейся с буквы
xyxxyx3yxayyxy3xyxyОбратите внимание на то, что выражения
{...}*+?Если хотите использовать в шаблоне один из специальных символов, вы должны сделать его управляющим, поставив перед ним обратную косую черту; например, символ
+\+23.8.2. Классы символов
Самые распространенные сочетания символов в сжатом виде представлены как специальные символы.

Символы в верхнем регистре означают “не вариант специального символа в нижнем регистре”. В частности, символ \W означает “не буква”, а не “буква в верхнем регистре”.
Элементы третьего столбца (например,
[[:digit:]]Как и библиотеки
stringiostreamregexstringiostream23.8.3. Повторения
Повторяющиеся шаблоны задаются постфиксными операторами.

Например, выражение
Ax*
соответствует символу A, за котором не следует ни одного символа или следует несколько символов x:
A
Ax
Axx
Axxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Если мы требуем, чтобы символ
x+*Ax+
соответствует символу A, за которым следует один или несколько символов x:
Ax
Axx
Axxxxxxxxxxxxxxxxxxxxxxxxxxxxx
но не
A
В общем случае необязательный символ (ни одного или несколько) указывается с помощью знака вопроса. Например, выражение
\d–?\d
соответствует двум цифрам с необязательным дефисом между ними:
1–2
12
но не
1––2
Для задания конкретного количества вхождений или конкретного диапазона вхождений используются фигурные скобки. Например, выражение