boost :: replace_all整个单词问题

时间:2014-06-05 17:35:42

标签: regex boost

我的正则表达式不起作用。为什么呢?

boost::regex re("anonuuid|anon_id", boost::regex::icase);
target_string = "anonuuid final.device_anonuuid anon_id";
boost::replace_all(target_string, "anonuuid", "device_anonuuid");

想法是找到并替换整个单词anonuuid OR anon_id。我使用了边界标签\ b这个词,但即便使用它,它也无法使用。以下是我的代码的结果。

device_anonuuid final.device_device_anonuuid anon_id"

但我希望得到这个

device_anonuuid final.device_anonuuid device_anonuuid

提前谢谢。

1 个答案:

答案 0 :(得分:1)

您想要regex_replace_all,请参阅 Live On Coliru

另请注意:

  • 您需要逃离\b(例如"\\b"
  • 您需要传递左值作为格式
  • 还有regex_replace_all_copy返回新字符串而不是修改输入字符串
 
#include <boost/regex.hpp>
#include <boost/algorithm/string_regex.hpp>

#include <string>
#include <iostream>

int main()
{
    boost::regex re("\\b(anonuuid|anon_id)\\b", boost::regex::icase);
    std::string target_string = "anonuuid final.device_anonuuid anon_id";
    std::string format = "QQQQ";
    boost::replace_all_regex(target_string, re, format, boost::match_flag_type::match_default);

    std::cout << target_string;
}