Флаг format_first_only
Флаг format_first_only применяется вместе с функцией
regex_replace и указывает ей заменить только
первое найденное совпадение с регулярным выражением,
а все последующие совпадения оставить без изменений.
По умолчанию regex_replace заменяет все совпадения
в строке, поэтому данный флаг используется, когда нужно
ограничить замену одним первым вхождением.
Флаг имеет тип std::regex_constants::match_flag_type
и передается в функцию regex_replace в качестве
третьего параметра. Значение флага можно комбинировать
с другими флагами через побитовое ИЛИ |.
Синтаксис
#include <regex>
std::regex_replace(str, re, fmt, std::regex_constants::format_first_only)
Пример
Давайте заменим только первое вхождение слова
"abc" на "X" в строке, где это слово
встречается несколько раз:
#include <iostream>
#include <regex>
#include <string>
using namespace std;
int main()
{
string str = "abc abc abc";
regex re("abc");
string res = regex_replace(str, re, "X", regex_constants::format_first_only);
cout << res << endl;
return 0;
}
Результат выполнения кода:
"X abc abc"
Пример
Давайте для сравнения выполним ту же замену без флага
format_first_only и увидим, что заменяются все
совпадения:
#include <iostream>
#include <regex>
#include <string>
using namespace std;
int main()
{
string str = "abc abc abc";
regex re("abc");
string res = regex_replace(str, re, "X");
cout << res << endl;
return 0;
}
Результат выполнения кода:
"X X X"
Пример
Давайте заменим только первое число в строке на символ
'#', используя регулярное выражение для цифр:
#include <iostream>
#include <regex>
#include <string>
using namespace std;
int main()
{
string str = "12345 67890 11111";
regex re("\\d+");
string res = regex_replace(str, re, "#", regex_constants::format_first_only);
cout << res << endl;
return 0;
}
Результат выполнения кода:
"# 67890 11111"
Смотрите также
-
функция
regex_replace,
которая заменяет совпадения в строке -
функция
regex_search,
которая ищет первое совпадение в строке -
функция
regex_match,
которая проверяет полное совпадение строки -
флаг
icase,
который включает игнорирование регистра