我正在尝试在C ++ 11(Visual Studio 2013)中使用std::regex_replace
,但我正在尝试创建的正则表达式抛出异常:
Microsoft C++ exception: std::regex_error at memory location 0x0030ED34
为什么会这样?这是我的定义:
std::string regexStr = R"(\([A - Za - z] | [0 - 9])[0 - 9]{2})";
std::regex rg(regexStr); <-- This is where the exception thrown
line = std::regex_replace(line, rg, this->protyp->getUTF8Character("$&"));
我想做什么:查找字符串中的所有匹配项,其格式如下:
“\ X99”或“\ 999” 其中X = A-Z或a-z且9 = 0-9。
我也尝试使用boost regex库,但它也会抛出一个异常。
(另一个问题:我可以在最后一行使用反向引用吗?我想根据匹配动态替换)
感谢您的帮助
答案 0 :(得分:1)
根据上述评论,您需要修复正则表达式:要匹配您需要使用"\\\\"
(或R("\\")
)的文字反斜杠。
我的代码显示了所有首批捕获的组:
string line = "\\X99 \\999";
string regexStr = "(\\\\([A-Za-z]|[0-9])[0-9]{2})";
regex rg(regexStr); //<-- This is where the exception was thrown before
smatch sm;
while (regex_search(line, sm, rg)) {
std::cout << sm[1] << std::endl;
line = sm.suffix().str();
}
输出:
\X99
\999
关于在替换字符串中使用方法调用,我在regex_replace documentation中找不到这样的功能:
fmt - 正则表达式替换格式字符串,确切的语法取决于 标志值