我正在尝试删除字符串中所有“:-)+ | ::-(+”的实例,但是编译器一直在给我regex错误
我尝试使用regex_constants :: basic,将正则表达式切换为“:-)+ |:-(+”,并切换至MinGW的c ++ 14版本
string a;
cin>>a;
regex r(":-\)+|:-\(+",regex_constants::basic);
cout << regex_replace(a, r, "");
上面的代码甚至在IDE中以“未知转义序列“ \)”“突出显示。
答案 0 :(得分:2)
要删除诸如:-))))
和:-(((
之类的字符串,请使用
std::string a("Text:-) :-(((here");
std::regex r(":-\\)+|:-\\(+"); // Or std::regex r(R"(:-\)+|:-\(+)");
std::cout << regex_replace(a, r, "") << std::endl;
// => Text here
请参见C++ demo
有两个问题:
"\("
创建了无效的字符串转义序列,因此会出错。要形成正则表达式转义序列,(
之前的反斜杠必须为文字反斜杠,并且要定义文字反斜杠,请使用"\\"
或R"(\)"
。 / li>
regex_constants::basic
标志,您需要引擎将您的表达式解析为POSIX BRE正则表达式,这使您的模式无效(如果转义了),因为\(
和\)
是用于形成捕获组,或者由于POSIX BRE中的:-)+|:-(+
与文字:-)+|:-(+
子字符串匹配而无法匹配(如果不能逃脱)。