boost :: regex_replace()只替换第一次出现,为什么?

时间:2010-05-17 09:56:58

标签: c++ boost

我的代码:

#include <string>
#include <boost/algorithm/string/regex.hpp>
std::cout << boost::algorithm::replace_regex_copy(
    "{x}{y}", // source string
    boost::regex("\\{.*?\\}"), // what to find
    std::string("{...}") // what to replace to
);

这就是我所看到的:

{…}{y}

因此,仅替换了第一次出现。为什么?怎么解决?

2 个答案:

答案 0 :(得分:0)

您可能希望使用replace_all_regex_copy()代替replace_regex_copy()

答案 1 :(得分:0)

正则表达式*(前一个零或多个)运算符匹配源字符串中尽可能多的字符,其中*?运算符匹配尽可能少的字符。

因此.*?中的boost::regex("\\{.*?\\}")仅匹配源字符串中的x(它甚至不会这样做,除非您告诉它匹配} }之后)并且整个表达式与{x}匹配。

如果您确实希望匹配整个字符串,则应使用boost::regex("\\{.*\\}")代替。

除非你真的想用{x}替换{y}{...},否则......在这种情况下,请忽略我的帖子。 ( - :