boost :: regex_replace () заменяет только первое вхождение, почему? - PullRequest
0 голосов
/ 17 мая 2010

Мой код:

#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 голосов
/ 18 сентября 2010

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

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

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

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

0 голосов
/ 17 мая 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...