Программирование. Принципы и практика использования C++ Исправленное издание, стр. 327
// получаем извне шаблон и набор строк// проверяем шаблон и ищем строки, содержащие этот шаблонint main(){ regex pattern; string pat; cout << "введите шаблон: "; getline(cin,pat); // считываем шаблон try { pattern = pat; // проверка шаблона cout << "Шаблон: " << pattern << '\n'; } catch (bad_expression) { cout << pat << "Не является корректным регулярным выражением\n"; exit(1); } cout << "Введите строки:\n"; string line; // входной буфер int lineno = 0; while (getline(cin,line)) { ++lineno; smatch matches; if (regex_search(line, matches, pattern)) { cout << " строка " << lineno << ": " << line << '\n'; for (int i = 0; i<matches.size(); ++i) cout << "\tmatches[" << i << "]: " << matches[i] << '\n'; } else cout << "не соответствует \n"; }}ПОПРОБУЙТЕ
Запустите эту программу и попробуйте применить ее для проверки нескольких шаблонов, например abc, x.*x, ( .* ), \([^)]*\) и \ w+\w+(Jr\.) ?.
23.9. Сравнение регулярных выражений
• Поиск строки, соответствующей регулярному выражению в (произвольно длинном) потоке данных, — функция
regex_search()• Сравнение регулярного выражения со строкой (заданного размера) — функция
regex_match()Одним из примеров является поиск почтовых индексов в разделе 23.6. Рассмотрим извлечение данных из следующей таблицы.

Эта совершенно типичная и не очень сложная таблица (количество учеников в 2007 году в средней школе, в которой учился Бьярне Страуструп) извлечена с веб страницы, на которой она выглядела именно так, как нам нужно.
• Содержит числовые поля.
• Содержит символьные поля в строках, понятных только людям, знающим контекст, из которого извлечена таблица. (В данном случае ее могут понять только люди, знающие датский язык.)
• Символьные строки содержат пробелы.
• Поля отделены друг от друга разделителем, роль которого в данном случае играет символ табуляции.
Проиллюстрируем использование регулярных выражения для решения следующих задач.
• Убедимся, что таблица сформирована правильно (т.е. каждая строка имеет правильное количество полей).
• Убедимся, что суммы подсчитаны правильно (в последней строке содержатся суммы чисел по столбцам).
Для того чтобы проанализировать эту таблицу, нам нужны два шаблона: для заголовка и для остальных строк.
regex header( "^[\\w ]+( [\\w ]+)*$");regex row( "^[\\w ]+(\\d+)(\\d+)(\\d+)$");
\w[\w][\w]+^[\w ]+^([\w]+)([\w]+)*$$"^[\\w ]+( [\\w ]+)*$"