#регулярные_выражения #cpp11
Здравствуйте. Есть следующий пример: #include#include int main() { std::string str("subject, subbase"); std::regex rx("sub\\w*"); std::smatch res; std::regex_search(str, res, rx); for(auto &i: res) { std::cout << i << " "; } return 0; } Output: subject Я ожидал вывод обоих слов из str, и тут мне подсвечивают как раз оба слова. G++ (GCC) 6.1.1 . Может я не правильно понял принцип работы функции regex_search? Она должна все совпадения внести в res, всё вроде верно.
Ответы
Ответ 1
Цикл for(auto &i: res) std::cout << i << " "; проходит по захваченным группам в результате поиска. Если вашу регулярку записать, например, в таком виде: std::regex rx("(sub)(\\w*)"); то будут захвачены следующие группы: subject sub ject Чтобы сматчить все слова, соответствующие вашей регулярке, можно использовать код: while (std::regex_search (str, res, rx)) { std::cout << res[0] << " "; str = res.suffix(); } Пример использования regex_search можно посмотреть, например, здесь.
Комментариев нет:
Отправить комментарий