Biblioteca de expresiones regulares
La biblioteca de expresiones regulares proporciona una clase que representa expresiones regulares, que son una especie de mini-lenguaje que se utiliza para realizar coincidencias de patrones dentro de cadenas. Casi todas las operaciones con expresiones regulares se pueden caracterizar operando en varios de los siguientes objetos:
- Secuencia de destino. La secuencia de caracteres que se busca para un patrón. Este 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í misma. Determina qué constituye una coincidencia. Es un objeto de tipo std::basic_regex, construido a partir de una cadena con una sintaxis especial. Véase regex_constants::syntax_option_type para obtener una descripción de las variaciones de sintaxis admitidas.
- Array de coincidencias. La información sobre coincidencias se puede recuperar como un objeto de tipo std::match_results.
- Cadena de reemplazo. Esta es una cadena que determina cómo reemplazar las coincidencias. Véase regex_constants::match_flag_type para obtener una descripción de las variaciones de sintaxis admitidas.
Contenido |
[editar] Clases principales
Estas clases encapsulan una expresión regular y los resultados de hacer coincidir una expresión regular dentro de una secuencia objetivo de caracteres.
(C++11) |
Objeto de expresiones regulares. (plantilla de clase) |
(C++11) |
Identifica la secuencia de caracteres coincididos por una subexpression. (plantilla de clase) |
(C++11) |
Identifica una coincidencia de expresión regular, incluyendo todas las coincidencias de subexpresión. (plantilla de clase) |
[editar] Algoritmos
Estas funciones se utilizan para aplicar la expresión regular encapsulada en una expresión regular a una secuencia de caracteres de destino.
(C++11) |
Intenta coincidir una expresión regular para toda la secuencia de caracteres. (plantilla de función) |
(C++11) |
Intenta coincidir una expresión regular con cualquier parte de una secuencia de caracteres. (plantilla de función) |
(C++11) |
Reemplaza las apariciones de una expresión regular con texto de reemplazo formateado. (plantilla de función) |
[editar] Iteradores
Los iteradores de expresiones regulares se utilizan para recorrer todo el conjunto de coincidencias de expresiones regulares encontrado dentro de una secuencia.
(C++11) |
Itera a través de todas las coincidencias de expresiones regulares dentro de una secuencia de caracteres. (plantilla de clase) |
(C++11) |
Itera a través de las subexpresiones especificadas dentro de todas las coincidencias de expresiones regulares en una cadena dada o a través de subcadenas no coincidentes. (plantilla de clase) |
[editar] Excepciones
Esta clase define el tipo de objetos lanzados como excepciones para reportar errores de la biblioteca de expresiones regulares.
(C++11) |
Informa de errores generado por la biblioteca de expresiones regulares. (clase) |
[editar] Rasgos de tipo
La clase de rasgos de expresiones regulares se utiliza para encapsular los aspectos localizables de una expresión regular.
(C++11) |
Proporciona metainformación sobre un tipo carácter, requerido por la biblioteca de expresiones regulares. (plantilla de clase) |
[editar] Constantes
Definido en el espacio de nombres
std::regex_constants | |
(C++11) |
Opciones generales para controlar el comportamiento de las expresiones regulares. (typedef) |
(C++11) |
Opciones específicas para coincidencias. (typedef) |
(C++11) |
Describe los diferentes tipos de errores de coincidencias. (typedef) |
[editar] Ejemplo
#include <iostream> #include <iterator> #include <string> #include <regex> int main() { std::string s = "Algunas personas, cuando se enfrentan a un problema, piensan " "\"Lo sé, usaré expresiones regulares.\" " "Ahora tienen dos problemas."; std::regex self_regex("EXPRESIONES REGULARES", std::regex_constants::ECMAScript | std::regex_constants::icase); if (std::regex_search(s, self_regex)) { std::cout << "El texto contiene la frase 'expresiones regulares'\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 << "Se encontraron " << std::distance(words_begin, words_end) << " palabras\n"; const int N = 6; std::cout << "Palabras de más de " << N << " caracteres:\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:
El texto contiene la frase 'expresiones regulares' Se encontraron 18 palabras Palabras de más de 6 caracteres: Algunas personas enfrentan problema piensan expresiones regulares problemas [Algunas] [personas], cuando se [enfrentan] a un [problema], [piensan] "Lo sé, usaré [expresiones] [regulares]" Ahora tienen dos [problemas].