2010-05-17 3 views
0

Мой код:boost :: regex_replace() заменяет только первое появление, почему?

#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

Вы можете использовать replace_all_regex_copy() вместо replace_regex_copy()

+0

большое спасибо! :) – yegor256

0

Регулярное выражение * (ноль или больше предыдущего) оператора совпадает количество символов из исходной строки, как это возможно, где *? оператор соответствует нескольким символам.

Так .*? в boost::regex("\\{.*?\\}") матчи только x в строке источника (это даже не сделать бы, что, за исключением того, что вы сказали это, чтобы соответствовать } впоследствии), и все выражение соответствует {x}.

Если вы действительно хотите совместить всю строку, вместо этого вы должны использовать boost::regex("\\{.*\\}").

Если вы действительно не хотели заменять оба {x} и {y}{...}, то есть ... в этом случае, пожалуйста, игнорируйте мое сообщение. (-:

Смежные вопросы