我如何在boost :: regex中使用反向引用

时间:2011-06-23 13:57:13

标签: c++ regex boost

我想在升级版本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我想念一些旗帜吗?

4 个答案:

答案 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;

当然使用\\ 这对我有用。

感谢