Namespaces
Variants

Regular expressions library (since C++11)

From cppreference.net

La biblioteca de expresiones regulares proporciona una clase que representa expresiones regulares , las cuales son un tipo de mini-lenguaje utilizado para realizar coincidencia de patrones dentro de cadenas. Casi todas las operaciones con regexes pueden caracterizarse operando sobre varios de los siguientes objetos:

  • Secuencia objetivo . La secuencia de caracteres en la que se busca un patrón. Puede ser un rango especificado por dos iteradores, una cadena de caracteres terminada en nulo o un std::string .
  • Patrón . Esta es la expresión regular en sí. Determina lo que constituye una coincidencia. Es un objeto de tipo std::basic_regex , construido a partir de una cadena con una gramática especial.
  • Arreglo coincidente . La información sobre coincidencias puede recuperarse como un objeto de tipo std::match_results .
  • Cadena de reemplazo . Esta es una cadena que determina cómo reemplazar las coincidencias.

Contenidos

Gramáticas de expresiones regulares

Los patrones y cadenas de reemplazo admiten las siguientes gramáticas de expresiones regulares:

También están disponibles algunas variaciones gramaticales (como la coincidencia sin distinción entre mayúsculas y minúsculas), consulte esta página para más detalles.

Clases principales

Estas clases encapsulan una expresión regular y los resultados de coincidir una expresión regular dentro de una secuencia objetivo de caracteres.

objeto de expresión regular
(plantilla de clase)
(C++11)
identifica la secuencia de caracteres coincidentes con una subexpresión
(plantilla de clase)
identifica una coincidencia de expresión regular, incluyendo todas las coincidencias de subexpresiones
(plantilla de clase)

Algoritmos

Estas funciones se utilizan para aplicar la expresión regular encapsulada en un regex a una secuencia objetivo de caracteres.

intenta hacer coincidir una expresión regular con una secuencia de caracteres completa
(plantilla de función)
intenta hacer coincidir una expresión regular con cualquier parte de una secuencia de caracteres
(plantilla de función)
reemplaza ocurrencias de una expresión regular con texto de reemplazo formateado
(plantilla de función)

Iteradores

Los iteradores de regex se utilizan para recorrer todo el conjunto de coincidencias de expresiones regulares encontradas dentro de una secuencia.

itera a través de todas las coincidencias de regex dentro de una secuencia de caracteres
(plantilla de clase)
itera a través de las subexpresiones especificadas dentro de todas las coincidencias de regex en una cadena dada o a través de subcadenas no coincidentes
(plantilla de clase)

Excepciones

Esta clase define el tipo de objetos lanzados como excepciones para reportar errores desde la biblioteca de expresiones regulares.

informa sobre errores generados por la biblioteca de expresiones regulares
(clase)

Rasgos

La clase de rasgos de regex se utiliza para encapsular los aspectos localizables de una regex.

proporciona metainformación sobre un tipo de carácter, requerida por la biblioteca de expresiones regulares
(plantilla de clase)

Constantes

Definido en el espacio de nombres std::regex_constants
opciones generales que controlan el comportamiento de las expresiones regulares
(typedef)
opciones específicas para coincidencias
(typedef)
(C++11)
describe diferentes tipos de errores de coincidencia
(typedef)

Ejemplo

#include <iostream>
#include <iterator>
#include <regex>
#include <string>
int main()
{
    std::string s = "Some people, when confronted with a problem, think "
        "\"I know, I'll use regular expressions.\" "
        "Now they have two problems.";
    std::regex self_regex("REGULAR EXPRESSIONS",
        std::regex_constants::ECMAScript | std::regex_constants::icase);
    if (std::regex_search(s, self_regex))
        std::cout << "Text contains the phrase 'regular expressions'\n";
    std::regex word_regex("(\\w+)");
    auto words_begin = 
        std::sregex_iterator(s.begin(), s.end(), word_regex);
    auto words_end = std::sregex_iterator();
    std::cout << "Found "
              << std::distance(words_begin, words_end)
              << " words\n";
    const int N = 6;
    std::cout << "Words longer than " << N << " characters:\n";
    for (std::sregex_iterator i = words_begin; i != words_end; ++i)
    {
        std::smatch match = *i;
        std::string match_str = match.str();
        if (match_str.size() > N)
            std::cout << "  " << match_str << '\n';
    }
    std::regex long_word_regex("(\\w{7,})");
    std::string new_s = std::regex_replace(s, long_word_regex, "[$&]");
    std::cout << new_s << '\n';
}

Salida:

Text contains the phrase 'regular expressions'
Found 20 words
Words longer than 6 characters:
  confronted
  problem
  regular
  expressions
  problems
Some people, when [confronted] with a [problem], think 
"I know, I'll use [regular] [expressions]." Now they have two [problems].