Я новичок в библиотеке C++ regex
. Я заметил, что, следуя документации на cplusplus.com, в своем примере условие, которое они использовали для завершения цикла итерации, всегда будет возвращать true
, если я использую регулярное выражение, которое соответствует всей целевой последовательности. В идеале цикл должен совпадать один раз, а затем завершаться. Вот мой код:Почему мое регулярное выражение вызывает бесконечный цикл?
#include <iostream>
#include <regex>
int main()
{
std::string str("Foo bar");
std::regex reg("(.|[\r\n])*"); // Match the whole string
std::regex_iterator<std::string::iterator> rit(str.begin(), str.end(), reg);
std::regex_iterator<std::string::iterator> rend;
while (rit != rend) // For some reason this is always true
{
std::cout << "Infinite loop!" << std::endl;
rit++;
}
return 0;
}
Что я делаю неправильно?
Когда он достигает конца строки, он по-прежнему соответствует **, потому что ваш шаблон соответствует пустой строке **. Измените его на '' (. | [\ R \ n]) + "'. – paulotorrens