tr1 :: regex正则表达式在嵌套大括号上抛出异常

时间:2014-02-19 19:06:25

标签: c++ regex tr1

当我使用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。

由于 苏尼

2 个答案:

答案 0 :(得分:0)

{}是RegEx元字符。他们必须逃脱。

答案 1 :(得分:0)

在那个正则表达式中,你需要使用反斜杠来逃避这些大括号:

\ { \}

正则表达式容器是一个字符串,因此反斜杠需要是该字符串的一部分。 要在用源代码编写的字符串中包含反斜杠,您需要使用...反斜杠转义它们:

"\\"后跟"{"

所以,试试这个:

string exp = "\\{(.*)\\}";

如果你必须通过一个额外的解析器来提供该字符串,这个解析器也会使用反斜杠转义,那么你将不得不再次使反斜杠的nuber加倍。

您需要"\\\\"来匹配反斜杠。