Более подробная информация о smatch и ssub_match приведена в следующем разделе, а пока достаточно знать, что они предоставляют доступ к контексту соответствия. У типов соответствия есть функции-члены prefix() и suffix(), возвращающие объект класса ssub_match, представляющий часть исходной последовательности перед и после текущего соответствия соответственно. У класса ssub_match есть функции-члены str() и length(), возвращающие соответствующую строку и ее размер соответственно. Используя эти функции, можно переписать цикл программы проверки правописания:
//
for (sregex_iterator it(file.begin(), file.end(), r), end_it;
it != end_it; ++it) {
auto pos = it->prefix().length(); //
pos = pos > 40 ? pos - 40 : 0; // необходимо до 40 символов
cout << it->prefix().str().substr(pos) //
<< "\n\t\t>>> " << it->str() << " <<<\n" //
//
<< it->suffix().str().substr(0, 40) //
<< endl;
}
Таблица 17.10. Операции с типом smatch
Эти операции применимы также к типам cmatch, wsmatch, wcmatch и соответствующим типам csub_match, wssub_match и wcsub_match. | |
|---|---|
m.ready() | Возвращает значение true, если m был установлен вызовом функции regex_search() или regex_match(), в противном случае — значение false (в этом случае результат операции с m непредсказуем) |
m.size() | Возвращает значение 0, если соответствия не найдено, в противном случае — на единицу больше, чем количество подвыражений в последнем соответствующем регулярном выражении |
m.empty() | Возвращает значение true, если размер нулевой |
m.prefix() | Возвращает объект класса ssub_match, представляющий последовательность перед соответствием |
m.suffix() | Возвращает объект класса ssub_match, представляющий часть после конца соответствия |
m.format(...) | См. табл. 17.12 |
В функциях, получающих индекс, n по умолчанию имеет значение нуль и должно быть меньше m.size(). Первое соответствие (с индексом 0) представляет общее соответствие. | |
m.length(n) | Возвращает размер соответствующего подвыражения номер n |
m.position(n) | Дистанция подвыражения номер n от начала последовательности |
m.str(n) | Соответствующая строка для подвыражения номер n |
m[n] | Объект ssub_match, соответствующий подвыражению номер n |
m.begin(), m.end() m.cbegin(), m.cend() | Итераторы элементов sub_match в m. Как обычно, функции cbegin() и cend() возвращают итераторы const_iterator |
Более подробная информация о smatch и ssub_match приведена в следующем разделе, а пока достаточно знать, что они предоставляют доступ к контексту соответствия. У типов соответствия есть функции-члены prefix() и suffix(), возвращающие объект класса ssub_match, представляющий часть исходной последовательности перед и после текущего соответствия соответственно. У класса ssub_match есть функции-члены str() и length(), возвращающие соответствующую строку и ее размер соответственно. Используя эти функции, можно переписать цикл программы проверки правописания:
//
for (sregex_iterator it(file.begin(), file.end(), r), end_it;
it != end_it; ++it) {