regex_replace Function
Replaces coincide con las expresiones regulares.
template<class OutIt, class BidIt, class RXtraits, class Alloc, class Elem>
OutIt regex_replace(OutIt out,
BidIt first, BidIt last,
const basic_regex<Elem, RXtraits, Alloc>& re,
const basic_string<Elem>& fmt,
match_flag_type flags = match_default);
template<class RXtraits, class Alloc, class Elem>
basic_string<Elem> regex_replace(const basic_string<Elem>& str,
const basic_regex<Elem, RXtraits, Alloc>& re,
const basic_string<Elem>& fmt,
match_flag_type flags = match_default);
Parámetros
OutIt
el iterador escrito para los reemplazos.BidIt
El iterador escrito para subcoincidencias.RXtraits
Clase de los rasgos para elementos.Alloc
La clase del asignador de expresiones regulares.Elem
El tipo de elementos que se va a comparar.flags
Solicita las coincidencias.first
Principio de la secuencia que se va a comparar.fmt
El formato de los reemplazos.last
Final de la secuencia que se va a comparar.out
El iterador de salida.re
La expresión regular que se va a comparar.str
Cadena que se va a comparar.
Comentarios
La primera función construye un objeto iter(first, last, re, flags) de regex_iterator Class y lo utiliza para dividir el rango de entrada [first, last) en una serie subsecuencias T0M0T1M1...TN-1MN-1TN, donde es la coincidencia Mn de nth detectada por el iterador.Si no se encuentra ninguna coincidencia, T0 es el intervalo de entrada completo y N es cero.Si se utiliza (flags & format_first_only) != 0 únicamente la primera coincidencia, T1 es todo el texto de entrada que sigue la coincidencia, y N es 1.Para cada i en el intervalo [0, N), si (flags & format_no_copy) == 0 se copia el texto del intervalo Ti el iterador out.Llama m.format(out, fmt, flags), donde es el objeto m de match_results devuelto por el objeto iter de iterador para el subsequence Mi.Finalmente, si (flags & format_no_copy) == 0 se copia el texto del intervalo TN el iterador out.la función devuelve out.
La segunda función crea una variable local result de basic_string<charT> escrito y llama a regex_replace(back_inserter(result), str.begin(), str.end(), re, fmt, flags).devuelve result.
Ejemplo
// std_tr1__regex__regex_replace.cpp
// compile with: /EHsc
#include <regex>
#include <iostream>
int main()
{
char buf[20];
const char *first = "axayaz";
const char *last = first + strlen(first);
std::regex rx("a");
std::string fmt("A");
std::regex_constants::match_flag_type fonly =
std::regex_constants::format_first_only;
*std::regex_replace(&buf[0], first, last, rx, fmt) = '\0';
std::cout << "replacement == " << &buf[0] << std::endl;
*std::regex_replace(&buf[0], first, last, rx, fmt, fonly) = '\0';
std::cout << "replacement == " << &buf[0] << std::endl;
std::string str("adaeaf");
std::cout << "replacement == "
<< std::regex_replace(str, rx, fmt) << std::endl;
std::cout << "replacement == "
<< std::regex_replace(str, rx, fmt, fonly) << std::endl;
return (0);
}
Requisitos
encabezado: <regex>
espacio de nombres: std