【发布时间】:2012-07-12 22:06:37
【问题描述】:
我要努力让它发挥作用。到目前为止,这是我所拥有的,但 ça ne marche pas。
const std::string singleslash("\\\\\\\\");
const std::string doublequote("\\\"\"\\");
const std::string doubleslash("\\\\\\\\\\\\");
const std::string slashquote("\\\\\\\\\"\\");
std::string temp(Variables);
temp.assign(boost::regex_replace(temp,boost::regex(singleslash),doubleslash,boost::match_default));
temp.assign(boost::regex_replace(temp,boost::regex(doublequote),slashquote,boost::match_default));
请有人救救我。
更新 看来我没有正确使用 regex_replace。这是一个更简单的示例,但也不起作用...
std::string w("Watermelon");
temp.assign(boost::regex_replace(w,boost::regex("W"),"x",boost::match_all | boost::format_all));
MessageBox((HWND)Window, temp.c_str(), "temp", MB_OK);
这给了我“西瓜”而不是“xatermelon”
更新 2 使用 boost::regex 错误...这个有效
boost::regex pattern("W");
temp.assign(boost::regex_replace(w,pattern,std::string("x")));
更新 3 这是最终奏效的方法
std::string w("Watermelon wishes backslash \\ and another backslash \\ and \"\"fatness\"\"");
temp.assign(w);
MessageBox((HWND)Window, temp.c_str(), "original", MB_OK);
const boost::regex singlebackslashpat("\\\\");
const std::string doublebackslash("\\\\\\\\");
temp.assign(boost::regex_replace(w,singlebackslashpat,doublebackslash));
MessageBox((HWND)Window, temp.c_str(), "double-backslash", MB_OK);
const boost::regex doublequotepat("\"\"");
const std::string backslashquote("\\\\\\\"");
temp.assign(boost::regex_replace(temp,doublequotepat,backslashquote));
MessageBox((HWND)Window, temp.c_str(), "temp", MB_OK);
【问题讨论】:
-
它到底是如何进行的?编译时错误?运行时完全匹配失败?运行时替换错误?碰撞?意外发射核弹头?
-
核弹头。 ;) 不只是在开玩笑——在运行时完全匹配失败。所有的单斜杠都还在。
-
我真的需要多少个反斜杠来告诉它寻找一个反斜杠!嘘。
-
其实也许它真的起作用了,只是当我看到它时,双斜线变成了一个斜线? (更新,不)
-
啊哈。我想你想要
match_default而不是match_all;后者似乎有一些相当令人惊讶的意思,这根本不是你想要的。