Namespaces
Variants

std:: regex_replace

From es.cppreference.net
**Notas sobre la traducción:** - Solo se tradujo el texto "(since C++11)" a "(desde C++11)" - Se preservaron todos los tags HTML y atributos - No se tradujo ningún código C++ dentro de las etiquetas - Se mantuvieron todos los términos específicos de C++ (template, class, const, etc.) - Se conservó el formato y estructura original del documento
Definido en el encabezado <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) (desde 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) (desde 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 > & str,
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) (desde 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 > & str,
const std:: basic_regex < CharT, Traits > & re,
const CharT * fmt,
std:: regex_constants :: match_flag_type flags =

std:: regex_constants :: match_default ) ;
(4) (desde 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) (desde 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) (desde C++11)

regex_replace utiliza la expresión regular re para realizar la sustitución en la secuencia de caracteres objetivo:

1,2) Copia los caracteres en el rango [ first , last ) a out , reemplazando cualquier secuencia que coincida con re con caracteres formateados por fmt . Equivalente a:
using iter_type = std::regex_iterator<BidirIt, CharT, Traits>;
iter_type seq_begin(first, last, re, flags), seq_end;
using result_type = std::match_results<BidirIt>;
result_type m;
bool need_to_copy = (flags & std::regex_constants::format_no_copy) == 0;
bool format_all = (flags & std::regex_constants::format_first_only) != 0;
for (iter_type i = seq_begin; i != seq.end(); ++i)
{
    m = *i;
    if (need_to_copy)
        out = std::copy(m.prefix().first, m.prefix().second, out);
    if (format_all || i == seq_begin)
        out = /* replace-expr */
}
if (need_to_copy)
    out = m.ready()
              ? std::copy(m.suffix().first, m.suffix().second, out)
              : std::copy(first, last, out);
return out;
1) La expresión /* replace-expr */ es m. format ( out, fmt, flags ) .
2) La expresión /* replace-expr */ es m. format ( out, fmt, fmt + std:: char_traits < CharT > :: length ( fmt ) , flags ) .
3,4) Equivalente a std:: basic_string < CharT, STraits, SAlloc > result ;
regex_replace ( std:: back_inserter ( result ) ,
str. begin ( ) , str. end ( ) , re, fmt, flags ) ;
return result ;
.
5,6) Equivalente a std:: basic_string < CharT, STraits, SAlloc > result ;
regex_replace ( std:: back_inserter ( result ) ,
s, s + std:: char_traits < CharT > :: length ( s ) , re, fmt, flags ) ;
return result ;
.

Contenidos

Parámetros

first, last - el rango de caracteres objetivo
str - el objetivo std::string
s - la cadena estilo C terminada en nulo objetivo
re - la expresión regular
fmt - la cadena de formato de reemplazo de regex, la sintaxis exacta depende del valor de flags
flags - banderas utilizadas para determinar cómo se realizará la coincidencia
out - iterador de salida para almacenar el resultado del reemplazo

Valor de retorno

Como se describió anteriormente.

Excepciones

Puede lanzar std::regex_error para indicar una condición de error .

Ejemplo

#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");
    // escribir los resultados a un iterador de salida
    std::regex_replace(std::ostreambuf_iterator<char>(std::cout),
                       text.begin(), text.end(), vowel_re, "*");
    // construir un string que contiene los resultados
    std::cout << '\n' << std::regex_replace(text, vowel_re, "[$&]") << '\n';
}

Salida:

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

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 2213 C++11 out no se actualizaba con los reemplazos out se actualiza

Véase también

intenta coincidir una expresión regular con cualquier parte de una secuencia de caracteres
(plantilla de función)
opciones específicas para coincidencias
(typedef)
reemplaza una porción especificada de una cadena
(función miembro pública de std::basic_string<CharT,Traits,Allocator> )