为什么我的正则表达式导致无限循环?

时间:2016-03-17 00:23:10

标签: c++ regex

我是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;
}

我做错了什么?

1 个答案:

答案 0 :(得分:3)

不是肯定的,必须验证,但我相信你的*表示0或更多。所以它可以永远匹配字符串末尾的0。