Более подробная информация о smatch и ssub_match приведена в следующем разделе, а пока достаточно знать, что они предоставляют доступ к контексту соответствия. У типов соответствия есть функции-члены prefix() и suffix(), возвращающие объект класса ssub_match, представляющий часть исходной последовательности перед и после текущего соответствия соответственно. У класса ssub_match есть функции-члены str() и length(), возвращающие соответствующую строку и ее размер соответственно. Используя эти функции, можно переписать цикл программы проверки правописания:

// тот же заголовок цикла for, что и прежде

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, что и прежде

for (sregex_iterator it(file.begin(), file.end(), r), end_it;

     it != end_it; ++it) {

Перейти на страницу:

Похожие книги