我怎么知道boost :: regex_replace是否做了改变?

时间:2012-06-28 20:36:10

标签: c++ boost

在perl中,我可以这样做

if($str =~ s/a/b/) {
  do something
}

在c ++中,我知道如何进行搜索/替换部分:

str = boost::regex_replace(str, boost::regex("a"), "b",  
                           boost::match_default | boost::format_perl ) ;

我如何知道是否进行了更换?

我可以将旧值与新值进行比较。还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

也许有更好的方法可以做到这一点,但我在documentation中看不出任何暗示。该函数似乎将输入格式化和/或复制到输出。所以直截了当的解决方案是这样的:

std::string result = boost::regex_replace(str, boost::regex("a"), "b",
                                          boost::match_default | boost::format_perl);
if (result != str) {
    // Do something with "result".
}

但是,如果您觉得需要非常有效的实现,可以使用regex_match()来确切地告诉您匹配的内容,然后自己替换子字符串。