当我使用microsoft tr1 :: regex时,带有'}'的正则表达式抛出异常。 但是同样的正则表达式可以和其他正则表达式解释器一起使用。
以下是简化的示例代码。
string source = "{james}";
string exp = "{(.*)}";
std::tr1::cmatch res;
std::tr1::regex rx(exp);// Throws Exception here
while(std::tr1::regex_search(source.c_str(), res, rx))
{
std::cout <<" "<< res[1]<<endl<<"....."<<endl;
source = res.suffix().str();
}
相同的代码工作正常here。 我在这里错过了什么? 我试过逃避'{',但这也不起作用
string source = "\{james\}";
string exp = "\{(.*)\}";
我正在使用Visual Studio 2010。
由于 苏尼
答案 0 :(得分:0)
{}
是RegEx元字符。他们必须逃脱。
答案 1 :(得分:0)
在那个正则表达式中,你需要使用反斜杠来逃避这些大括号:
\ { \}
正则表达式容器是一个字符串,因此反斜杠需要是该字符串的一部分。 要在用源代码编写的字符串中包含反斜杠,您需要使用...反斜杠转义它们:
"\\"
后跟"{"
所以,试试这个:
string exp = "\\{(.*)\\}";
如果你必须通过一个额外的解析器来提供该字符串,这个解析器也会使用反斜杠转义,那么你将不得不再次使反斜杠的nuber加倍。
您需要"\\\\"
来匹配反斜杠。