std :: regex escape" +"标志

时间:2018-03-12 17:30:26

标签: c++ regex c++14

我完全不明白如何使用正则表达式来逃避。 我试着检测一个" +"。我知道这也是正则表达式的一个特殊标志,表明有更多的迹象。

根据我的理解,这些特殊标志需要用" \"进行转义。对于+,这似乎适用于"。"但是,如果我使用" +转义加号,我会得到运行时异常。

  

"匹配。 regex_error(error_badrepeat):之前没有*?+ {之一   通过有效的规则表达式。"

所以我认为它没有被正确转义。

示例:

#include <iostream>
#include <string>
#include <regex>
#include <exception>



int main() 
try {
    std::regex point("\.");

    std::string s1 = ".";
    if (std::regex_match(s1, point))
        std::cout << "matched" << s1;

    std::regex plus("\+");

    std::string s2 = "+";
    if (std::regex_match(s2, plus))
        std::cout << "matched" << s2;

    char c;
    std::cin >> c;

}
catch (std::runtime_error& e) {
    std::cerr << e.what()<<'\n';

    char c;
    std::cin >> c;
}
catch (...) {
    std::cerr << "unknown error\n";

    char c;
    std::cin >> c;
}

2 个答案:

答案 0 :(得分:2)

您正在使用C ++字符串文字,其中\是一个特殊字符,应该进行转义。所以你应该使用"\\+"

为避免双重转义,您还可以使用raw string literal,例如R"(\+)"

答案 1 :(得分:0)

DOT .,加号+是C ++中正则表达式操作的特殊字符。所以你必须这样做: -

    regex point("\\.");