std::正则表达式无法按预期工作

std::regex not working as expected

本文关键字:工作 正则表达式 std      更新时间:2023-10-16

我用谷歌搜索了一下,但仍然找不到错误。

为什么下面的代码打印false,我期望true

#include <iostream>
#include <regex>
using namespace std;
int main()
{
    std::string in("15n");
    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的选项。

正则表达式中的""前面有一个额外的斜杠。代码打印true,只删除斜杠。

#include <iostream>
#include <regex>
using namespace std;
int main()
{
    std::string in("15n");
    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 转义序列,例如 n 。参见Posix基本定义9.4.2:"对前面有('')的普通字符的解释是未定义的。