Spec-Zone.ru › C++

std::regex_replace

Определено в заголовке <regex>
template< class OutputIt, class BidirIt,
          class Traits, class CharT,
          class STraits, class SAlloc >
OutputIt regex_replace( OutputIt out, BidirIt first, BidirIt last,
                        const std::basic_regex<CharT,Traits>& re,
                        const std::basic_string<CharT,STraits,SAlloc>& fmt,
                        std::regex_constants::match_flag_type flags =
                            std::regex_constants::match_default );
(1) (с C++11)
template< class OutputIt, class BidirIt,
          class Traits, class CharT >
OutputIt regex_replace( OutputIt out, BidirIt first, BidirIt last,
                        const std::basic_regex<CharT,Traits>& re,
                        const CharT* fmt,
                        std::regex_constants::match_flag_type flags =
                            std::regex_constants::match_default );
(2) (с C++11)
template< class Traits, class CharT,
          class STraits, class SAlloc,
          class FTraits, class FAlloc >
std::basic_string<CharT,STraits,SAlloc>
    regex_replace( const std::basic_string<CharT,STraits,SAlloc>& s,
                   const std::basic_regex<CharT,Traits>& re,
                   const std::basic_string<CharT,FTraits,FAlloc>& fmt,
                   std::regex_constants::match_flag_type flags =
                       std::regex_constants::match_default );
(3) (с C++11)
template< class Traits, class CharT,
          class STraits, class SAlloc >
std::basic_string<CharT,STraits,SAlloc>
    regex_replace( const std::basic_string<CharT,STraits,SAlloc>& s,
                   const std::basic_regex<CharT,Traits>& re,
                   const CharT* fmt,
                   std::regex_constants::match_flag_type flags =
                       std::regex_constants::match_default );
(4) (с C++11)
template< class Traits, class CharT,
          class STraits, class SAlloc >
std::basic_string<CharT>
    regex_replace( const CharT* s,
                   const std::basic_regex<CharT,Traits>& re,
                   const std::basic_string<CharT,STraits,SAlloc>& fmt,
                   std::regex_constants::match_flag_type flags =
                       std::regex_constants::match_default );
(5) (с C++11)
template< class Traits, class CharT >
std::basic_string<CharT>
    regex_replace( const CharT* s,
                   const std::basic_regex<CharT,Traits>& re,
                   const CharT* fmt,
                   std::regex_constants::match_flag_type flags =
                       std::regex_constants::match_default );
(6) (с C++11)

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

1) Копирует символы в диапазоне [first, last) до out, заменяя любые последовательности, соответствующие re на символы, отформатированные по fmt. Другими словами:
  • Создает объект std::regex_iterator i так, как если бы это было сделано std::regex_iterator<BidirIt, CharT, traits> i(first, last, re, flags), и использует его для прохода по каждому совпадению re в последовательности [first, last).
  • Для каждого такого совпадения m, копирует несовпадающую подпоследовательность (m.prefix()) в out как если бы это было сделано out = std::copy(m.prefix().first, m.prefix().second, out), а затем заменяет совпадающую подпоследовательность отформатированной строкой замены, как если бы это было сделано вызовом out = m.format(out, fmt, flags).
  • Когда больше нет совпадений, копирует оставшиеся несовпадающие символы в out как если бы это было сделано out = std::copy(last_m.suffix().first, last_m.suffix().second, out), где last_m — копия последнего найденного совпадения.
  • Если совпадений нет, копирует всю последовательность в out как есть, используя out = std::copy(first, last, out).
  • Если flags содержит std::regex_constants::format_no_copy, несовпадающие подпоследовательности не копируются в out.
  • Если flags содержит std::regex_constants::format_first_only, заменяется только первое совпадение.
2) То же, что и (1), но отформатированная замена выполняется как если бы это было сделано вызовом out = m.format(out, fmt, fmt + char_traits<CharT>::length(fmt), flags).
3,4) Создает пустую строку result типа std::basic_string<CharT, ST, SA> и вызывает std::regex_replace(std::back_inserter(result), s.begin(), s.end(), re, fmt, flags).
5,6) Создает пустую строку result типа std::basic_string<CharT> и вызывает std::regex_replace(std::back_inserter(result), s, s + std::char_traits<CharT>::length(s), re, fmt, flags).

Параметры

first, last - входная последовательность символов, представленная парой итераторов
s - входная последовательность символов, представленная std::basic_string или массивом символов
re - регулярное std::basic_regex, которое будет сопоставлено с входной последовательностью
fmt - строка формата замены регулярного выражения, точный синтаксис зависит от значения flags
flags - флаги соответствия типа std::regex_constants::match_flag_type
out - итератор вывода для хранения результата замены
Требования к типу
-OutputIt должно удовлетворять требованиям LegacyOutputIterator.
-BidirIt должно удовлетворять требованиям LegacyBidirectionalIterator.

Возвращаемое значение

1,2) Возвращает копию итератора вывода out после всех вставок.
3-6) Возвращает строку result, содержащую вывод.

Исключения

Может выбросить std::regex_error для обозначения условия ошибки.

Пример

#include <iostream>
#include <iterator>
#include <regex>
#include <string>
 
int main()
{
   std::string text = "Quick brown fox";
   std::regex vowel_re("a|e|i|o|u");
 
   // write the results to an output iterator
   std::regex_replace(std::ostreambuf_iterator<char>(std::cout),
                      text.begin(), text.end(), vowel_re, "*");
 
   // construct a string holding the results
   std::cout << '\n' << std::regex_replace(text, vowel_re, "[$&]") << '\n';
}

Вывод:

Q**ck br*wn f*x
Q[u][i]ck br[o]wn f[o]x

См. также

regex_search
(C++11)
попытка сопоставить регулярное выражение с любой частью последовательности символов
(функция-шаблон)
match_flag_type
(C++11)
опции, специфичные для сопоставления
(тип)
replace
заменяет указанную часть строки
(публичный член-функция std::basic_string<CharT,Traits,Allocator>)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/regex/regex_replace

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API