我完全不明白如何使用正则表达式来逃避。 我试着检测一个" +"。我知道这也是正则表达式的一个特殊标志,表明有更多的迹象。
根据我的理解,这些特殊标志需要用" \"进行转义。对于+,这似乎适用于"。"但是,如果我使用" +转义加号,我会得到运行时异常。
"匹配。 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;
}
答案 0 :(得分:2)
您正在使用C ++字符串文字,其中\
是一个特殊字符,应该进行转义。所以你应该使用"\\+"
。
为避免双重转义,您还可以使用raw string literal,例如R"(\+)"
。
答案 1 :(得分:0)
DOT .
,加号+
是C ++中正则表达式操作的特殊字符。所以你必须这样做: -
regex point("\\.");