std :: regex与工作表达式不匹配?

时间:2014-04-29 15:20:18

标签: c++ regex

无论出于何种原因,我为我的程序创建的正则表达式与在任何其他实现中匹配的行都不匹配。我想知道是否有一些我不理解的新语法?

这是我自己的实现:

std::string line, pattern("[LS] 0x[0-9a-fA-F]{8}");
std::regex rx(pattern, std::regex::basic);
uint line_count = 0;

while (getline(in_file, line))
{
    line_count++;

    if (std::regex_match(line, rx))
    {
        bool type = (line[0] == 'L');
        uint address = (uint) std::stoul(line.substr(4, 8), nullptr, 16);

        m_type_store.push_back(type);
        m_address_store.push_back(address);
    } else {
        std::cerr << line << " |" << line_count << '|' << std::endl;
        in_file.close();
        exit(1);
    }
}

每次它都无法匹配文件的第一行,这恰好是:

S 0x0022f5b4

这看起来对我很好......我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

在您的代码中,您使用的是 Basic 正则表达式。我不确定C ++,但通常在Basic RE中,在指定多重性时,需要在{}前加\。换句话说,您的代码应该是:

std::string line, pattern("[LS] 0x[0-9a-fA-F]\{8\}");

或者,您可以使用 Extended RE 代替 Basic RE ,就像在std::regex::extended中一样。