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