std::regex 未按预期工作

std::regex not working as expected

我四处搜索,但仍然找不到错误。

为什么下面的代码会打印 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 的选项。

您的正则表达式中的“\n”前有一个额外的斜线。代码打印出 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-standard extended regular expressions (selected with std::regex_constants::extended) do not recognize C-escape sequences such as \n. See Posix base definitions 9.4.2: "The interpretation of an ordinary character preceded by a ( '\' ) is undefined."