我想在升级版本1.44中使用反向引用,但这对我不起作用。 这是我的代码:
boost::regex_constants::syntax_option_type flags = boost::regex::extended;
std::string regx="(aaa)bb\1";
std::cout << "Expression: \"" << regx << "\"\n";
std::string str ="aaabbaaa";
boost::regex e(regx,flags);
if(boost::regex_match(text, what, e))//, boost::match_extra))
{
std::cout<<"found";
} else
{
std::cout<<"not found";
}
这是我的输出:
Expression: "(aaa)bbb☺"
** not found **
Press any key to continue . . .
我错过了什么?
当我尝试std::string regx="(aaa)bb\\1"
程序在boost::regex e(regx,flags);
崩溃时
mybe我想念一些旗帜吗?
答案 0 :(得分:1)
"(aaa)bb\\1"
。你需要逃避反斜杠。
答案 1 :(得分:1)
C ++和正则表达式都使用\
作为转义字符。当你在字符串中使用它时,C ++将它解释为八进制字符常量1.你需要双重转义1:std::string regx="(aaa)bb\\1";
答案 2 :(得分:1)
除了需要逃避反斜杠外:
Boost :: regex默认设置特定于扩展语法的no_bk_refs标志。如果你想使用扩展语法的反向引用,你必须自己取消它:
flags = boost::regex::extended & ~boost::regex::no_bk_refs;
答案 3 :(得分:0)
我通过更改此行来解决此问题
boost::regex_constants::syntax_option_type flags = boost::regex::extended;
到
boost::regex_constants::syntax_option_type flags = boost::regex::bk_vbar;
当然使用\\
这对我有用。
感谢