当我使用microsoft tr1 :: regex时,带有'}'的正则表达式会引发异常。 但同样的正则表达式可以很好地与其他正则表达式解释器一起工作。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中
感谢 苏尼尔
你使用的是gcc吗? –
应该是'string_exp =“\ {(。*)\}”'。也有些情况下,你可能必须根据你的'std :: regex'构造函数标志来避免反斜杠。还要注意,你不能有'字符串exp =字符串exp = ...'你不能在变量名中有空格。 – Brandon
不同的正则表达式引擎具有不同的行为,功能集,有时甚至包含一些不同的符号,例如tr1中的{}。你必须检查什么时候在引擎之间切换,没有一般的标准。珍珠是一个准标准,但它只是带来了一些疏忽,它对发动机开发商没有规定。始终阅读与您一起工作的新引擎的文档。 –