std :: regex没有按预期工作

时间:2015-01-12 18:59:30

标签: c++ regex

我用Google搜索但仍无法找到错误。

为什么以下代码会打印false,我期待true

#include <iostream>
#include <regex>

using namespace std;

int main()
{
    std::string in("15\n");
    std::regex r("[1-9]+[0-9]*\\n",
                 std::regex_constants::extended);

    std::cout << std::boolalpha;
    std::cout << std::regex_match(in, r) << std::endl;
}

未提供使用regex_search的选项。

1 个答案:

答案 0 :(得分:3)

&#34; \ n&#34;之前有一个额外的斜杠。在你的正则表达式。代码打印true只删除了斜杠。

#include <iostream>
#include <regex>

using namespace std;

int main()
{
    std::string in("15\n");
    std::regex r("[1-9]+[0-9]*\n",
                 std::regex_constants::extended);

    std::cout << std::boolalpha;
    std::cout << std::regex_match(in, r) << std::endl;
}

编辑:@rici解释了为什么这是评论中的问题:

  

Posix标准扩展正则表达式(使用std::regex_constants::extended选择)不识别C-escape序列,例如\n。请参阅Posix base definitions 9.4.2:&#34;前缀为(&#39; \&#39;)的普通字符的解释未定义。&#34;