2015-10-13 5 views
0

std::regex_replace (Добавлено в C++ 11) заменяет все вхождения. Как я могу заставить его заменить только первое вхождение?std :: regex_replace только первое появление C++

+0

Добро пожаловать в StackOverflow. Я хотел бы указать вам на http://stackoverflow.com/help/how-to-ask и, в частности: «Объясните, как вы столкнулись с проблемой, которую пытаетесь решить, и любыми трудностями, которые мешали вам решить ее сам." –

ответ

8

Если флаги содержат std::regex_constants::format_first_only, заменяется только первое совпадение.

std::regex_replace("12 34", 
        std::regex(R"(\d+)"), 
        "num", 
        std::regex_constants::format_first_only); 

stribizhev любезно предоставил working example.

Ссылки

+0

Пример использования был бы очень приятным :) – HRgiger

+0

Я писал это, поскольку я не хотел публиковать без примера :(Вот [фрагмент] (http://ideone.com/PvzQgf). –

+0

regex_replace ("231 is is моя строка 1 ", regex (" \\ d + "), строка (" число "), std :: tr1 :: regex_constants :: format_first_only); –

0

Я нашел решение сам. Проводка для других, если они сталкиваются с одной и той же проблемой. Добавить:

std::tr1::regex_constants::format_first_only

заменить только первое вхождение в качестве четвертого аргумента regex_replace

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