我有一个正则表达式:
std::regex regexp(
R"($ part, model.*[nr]([-]?[0-9]*.?[0-9]+[Ee]?[-+]?[0-9]*),([-]?[0-9]*.?[0-9]+[Ee]?[-+]?[0-9]*))",std::regex::extended);
代码编译,但我收到以下错误:
Unhandled exception at 0x748F49C2 in regex.exe: Microsoft C++ exception: std::regex_error at memory location 0x00EFEE30.
根据regex规范,转义空格(不是特殊字符)的效果是未定义的:
9.4.2 ERE普通字符
…以未转义的<反斜杠>(
)是未定义的,除非在括号表达式的上下文中…反斜杠>
显然在MSVC实现中,std::regex_error
被抛出。
修复转义后的regex编译。
try {
std::regex regexp(
R"($ part, model.*[nr]([-]?[0-9]*.?[0-9]+[Ee]?[-+]?[0-9]*),([-]?[0-9]*.?[0-9]+[Ee]?[-+]?[0-9]*))", std::regex::extended);
}
catch (std::exception const& e) {
std::cerr << e.what() << std::endl;
}