std::regex_token_iterator - cppreference.com
De cppreference.com
| Definido en el archivo de encabezado |
||
|
|
(desde C++11) | |
std::regex_token_iterator es un ForwardIterator de solo lectura que accede a las subcoincidencias individuales de cada coincidencia de una expresión regular dentro de la secuencia de caracteres subyacentes. También se puede usar para acceder a las partes de la secuencia que no se coincidieron por una expresión regular dada (p. ej., como un tokenizador).
Durante la construcción, construye un std::regex_iterator y en cada incremento pasa a través de las subcoincidencias solicitadas del objeto std::match_results actual, incrementando el regex_iterator subyacente cuando la incrementación se aleja de la última subcoincidencia.
El iterador std::regex_token_iterator construido por defecto es el iterador al final de la secuencia. Cuando un iterador std::regex_token_iterator válido se incrementa después de alcanzar la última subcoincidencia de la última coincidencia, se hace igual al iterador al final de la secuencia. Desreferenciarlo o incrementarlo más allá resulta en comportamiento no definido.
Justo antes de volverse el iterador al final de la secuencia, un std::regex_token_iterator puede volverse un iterador de sufijo, si el índice -1 (un fragmento no coincidido) aparece en la lista de los índices de la subcoincidencia solicitada. Dicho iterador, si se desreferencia, devuelve un objeto std::match_results correspondiente a la secuencia de caracteres entre la última coincidencia y el final de la secuencia.
Una implementación habitual de std::regex_token_iterator alberga el iterador std::regex_iterator subyacente, un contenedor (p. ej., std::vector<int>) de los índices de la subcoincidencia solicitada, el contador interno igual al índice de la subcoincidencia, un puntero a std::sub_match, que apunta a la subcoincidencia actual de la coincidencia actual, y un objeto std::match_results que contiene la última secuencia de caracteres que no coincidieron (usados en la modalidad tokenizador).
Requerimientos de tipo
Especializaciones
Se definen varias especializaciones para los tipos de secuencias de caracteres comunes:
Definido en el archivo de encabezado | |
| Tipo | Definición |
cregex_token_iterator
|
regex_token_iterator<const char*>
|
wcregex_token_iterator
|
regex_token_iterator<const wchar_t*>
|
sregex_token_iterator
|
regex_token_iterator<std::string::const_iterator>
|
wsregex_token_iterator
|
regex_token_iterator<std::wstring::const_iterator>
|
Tipos miembro
| Tipo miembro | Definición |
value_type
|
std::sub_match<BidirIt>
|
difference_type
|
std::ptrdiff_t |
pointer
|
const value_type*
|
reference
|
const value_type&
|
iterator_category
|
std::forward_iterator_tag |
regex_type
|
basic_regex<CharT, Traits>
|
Funciones miembro
Construye un nuevo objeto regex_token_iterator. (función miembro pública) [editar] | |
(destructor) (implícitamente declarado) |
Destruye un objeto regex_token_iterator, incluyendo el valor almacenado en caché. (función miembro pública) [editar] |
| Asigna el contenido. (función miembro pública) [editar] | |
(eliminado en C++20) |
Compara dos objetos regex_token_iterator. (función miembro pública) [editar] |
| Accede a la subcoincidencia actual. (función miembro pública) [editar] | |
| Avanza el iterador a la subcoincidencia siguiente. (función miembro pública) [editar] |
Notas
La responsabilidad del programador es asegurar que el objeto std::basic_regex pasado al constructor del iterador sobreviva al iterador. Debido a que el iterador almacena un std::regex_iterator, que almacena un puntero a la expresión regular, incrementar el iterador después de que se destruyó la expresión regular resulta en comportamiento no definido.
Ejemplo
#include <fstream> #include <iostream> #include <algorithm> #include <iterator> #include <regex> int main() { // Tokenización (fragmentos que no coincidieron) // Observa que la expresión regular se coincide solo dos veces; // cuando el tercer valor se obtiene, el iterador es un iterador de sufijo. const std::string texto = "La zorra veloz."; const std::regex er_espacio("\\s+"); // espacio en blanco std::copy( std::sregex_token_iterator(texto.begin(), texto.end(), er_espacio, -1), std::sregex_token_iterator(), std::ostream_iterator<std::string>(std::cout, "\n")); std::cout << '\n'; // Iterar sobre las primeras subcoincidencias const std::string html = R"(<p><a href="http://google.com.mx">google</a> )" R"(< a HREF ="http://es.cppreference.com">cppreference</a>\n</p>)"; const std::regex er_url(R"!!(<\s*A\s+[^>]*href\s*=\s*"([^"]*)")!!", std::regex::icase); std::copy( std::sregex_token_iterator(html.begin(), html.end(), er_url, 1), std::sregex_token_iterator(), std::ostream_iterator<std::string>(std::cout, "\n")); }
Salida:
La zorra veloz. http://google.com.mx http://es.cppreference.com