Страницы

Поиск по вопросам

воскресенье, 8 марта 2020 г.

Некорретно обрабатываются регулярные выражения

#регулярные_выражения #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 можно посмотреть, например, здесь.

Комментариев нет:

Отправить комментарий