Функции regex_match() и regex_search() определяют, соответствует ли заданная последовательность символов предоставленному объекту класса regex. Функция regex_match() возвращает значение true, если вся исходная последовательность соответствует выражению; функция regex_search() возвращает значение true, если в исходной последовательности выражению соответствует подстрока. Есть также функция regex_replace(), описываемая в разделе 17.3.4.
Аргументы функции regex описаны в табл. 17.5. Эти функции возвращают логическое значение и допускают перегрузку: одна версия получает дополнительный аргумент типа smatch. Если он есть, эти функции сохраняют дополнительную информацию об успехе обнаружения соответствия в предоставленном объекте класса smatch.
17.3.1. Использование библиотеки регулярных выражений
В качестве довольно простого примера рассмотрим поиск слов, нарушающих известное правило правописания "
//
string pattern("[^с]ei");
//
pattern = "[[:alpha:]]*" + pattern + "[[:alpha:]]*";
regex r(pattern); //
smatch results; //
//
//
string test_str = "receipt freind theif receive";
//
if (regex_search(test_str, results, r)) //
cout << results.str() << endl; //
Таблица 17.5. Аргументы функций regex_search() и regex_match()
| Обратите внимание: функции возвращают логическое значение, означающее, было ли найдено соответствие. | |
|---|---|
( | Поиск регулярного выражения объекта r класса regex в символьной последовательности . Последовательность может быть строкой, парой итераторов, обозначающих диапазон, или указателем на символьный массив с нулевым символом в конце, m — это объект соответствия, используемый для хранения подробностей о соответствии. Типы объекта m и последовательности должны быть совместимы (см. раздел 17.3.1). mft — это необязательное значение regex_constants::match_flag_type. Это значение, описанное в табл. 17.13, влияет на процесс поиска соответствия |
Таблица 17.6. Операции с классом regex (и wregex)