Класс ssub_match
Класс ssub_match - это тип подсовпадения, который используется
в библиотеке <regex> для представления отдельной захваченной
группы при работе со строками типа std::string. Объект
ssub_match хранит информацию о найденной подстроке: позицию
начала, длину и саму подстроку. Получить объект ssub_match
можно через объект smatch, который возвращается функциями
regex_search и regex_match. Класс поддерживает
оператор преобразования к типу std::string, методы
str, length и compare.
Синтаксис
#include <regex>
std::ssub_match sub = match[i];
std::string s = sub.str();
size_t len = sub.length();
Пример
Давайте найдём первое число в строке "abc123def456"
с помощью регулярного выражения и выведем найденное
подсовпадение через метод str:
#include <iostream>
#include <regex>
#include <string>
using namespace std;
int main()
{
string str = "abc123def456";
regex re("(\\d+)");
smatch match;
if (regex_search(str, match, re)) {
ssub_match sub = match[1];
cout << sub.str() << endl;
}
return 0;
}
Результат выполнения кода:
123
Пример
Давайте переберём все числа в строке "abc123def456"
с помощью sregex_iterator и для каждого подсовпадения
выведем его длину через метод length:
#include <iostream>
#include <regex>
#include <string>
using namespace std;
int main()
{
string str = "abc123def456";
regex re("(\\d+)");
for (sregex_iterator it(str.begin(), str.end(), re), end; it != end; ++it) {
ssub_match sub = (*it)[1];
cout << sub.str() << " : " << sub.length() << endl;
}
return 0;
}
Результат выполнения кода:
"123 : 3"
"456 : 3"
Пример
Давайте получим объект ssub_match и преобразуем его
к типу std::string с помощью оператора преобразования,
а также проверим совпадение через метод compare:
#include <iostream>
#include <regex>
#include <string>
using namespace std;
int main()
{
string str = "abc123def456";
regex re("(\\d+)");
smatch match;
if (regex_search(str, match, re)) {
ssub_match sub = match[1];
string s = sub;
cout << s << endl;
cout << sub.compare("123") << endl;
}
return 0;
}
Результат выполнения кода:
123
0
Смотрите также
-
класс
cmatch,
который хранит результаты поиска для строк C-стиля -
функция
regex_search,
которая ищет первое совпадение в строке -
функция
regex_match,
которая проверяет полное совпадение строки с шаблоном -
класс
regex_iterator,
который перебирает все совпадения в строке