Более подробная информация о 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) {