Класс cmatch
Класс cmatch используется для хранения результатов поиска
по регулярному выражению, когда исходная строка представлена
в виде C-строки (указателя на 'char'). Он является
специализацией шаблона match_results для итераторов
типа const char*. После выполнения функций
regex_match или regex_search объект
cmatch содержит информацию обо всём найденном
совпадении и обо всех захваченных подвыражениях. Доступ
к отдельным совпадениям осуществляется через оператор
[] или метод str.
Синтаксис
#include <regex>
std::cmatch match;
Пример
Давайте найдём первое число в строке "abc123def"
и выведем его на экран:
#include <iostream>
#include <regex>
using namespace std;
int main()
{
const char* str = "abc123def";
cmatch res;
regex reg("[0-9]+");
if (regex_search(str, res, reg)) {
cout << res.str() << endl;
}
return 0;
}
Результат выполнения кода:
123
Пример
Давайте воспользуемся захватывающими группами, чтобы извлечь отдельно буквенную и цифровую части строки:
#include <iostream>
#include <regex>
using namespace std;
int main()
{
const char* str = "abc123def";
cmatch res;
regex reg("([a-z]+)([0-9]+)");
if (regex_search(str, res, reg)) {
cout << "all: " << res.str(0) << endl;
cout << "letters: " << res.str(1) << endl;
cout << "digits: " << res.str(2) << endl;
}
return 0;
}
Результат выполнения кода:
"all: abc123"
"letters: abc"
"digits: 123"
Пример
Давайте проверим, сколько подвыражений содержит найденное
совпадение, с помощью метода size:
#include <iostream>
#include <regex>
using namespace std;
int main()
{
const char* str = "abc123def";
cmatch res;
regex reg("([a-z]+)([0-9]+)([a-z]+)");
if (regex_search(str, res, reg)) {
cout << "size: " << res.size() << endl;
cout << "position: " << res.position(0) << endl;
cout << "length: " << res.length(0) << endl;
}
return 0;
}
Результат выполнения кода:
"size: 4"
"position: 0"
"length: 9"
Смотрите также
-
функция
regex_search,
которая ищет первое совпадение с регулярным выражением -
функция
regex_match,
которая проверяет полное совпадение строки с шаблоном -
класс
ssub_match,
который хранит результат совпадения для std::string -
класс
regex,
который представляет само регулярное выражение