我的代码:
#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}
因此,仅替换了第一次出现。为什么?怎么解决?
答案 0 :(得分:0)
您可能希望使用replace_all_regex_copy()
代替replace_regex_copy()
答案 1 :(得分:0)
正则表达式*(前一个零或多个)运算符匹配源字符串中尽可能多的字符,其中*?运算符匹配尽可能少的字符。
因此.*?
中的boost::regex("\\{.*?\\}")
仅匹配源字符串中的x
(它甚至不会这样做,除非您告诉它匹配}
}之后)并且整个表达式与{x}
匹配。
如果您确实希望匹配整个字符串,则应使用boost::regex("\\{.*\\}")
代替。
除非你真的想用{x}
替换{y}
和{...}
,否则......在这种情况下,请忽略我的帖子。 ( - :