std:: regex_iterator
|
Definido en el encabezado
<regex>
|
||
|
template
<
class
BidirIt,
|
(desde C++11) | |
std::regex_iterator
es un iterador de solo lectura que accede a las coincidencias individuales de una expresión regular dentro de la secuencia de caracteres subyacente. Cumple con los requisitos de un
LegacyForwardIterator
, excepto que para valores dereferenciables
a
y
b
con
a
==
b
,
*
a
y
*
b
no estarán vinculados al mismo objeto.
Al construir, y en cada incremento, llama a std::regex_search y recuerda el resultado (es decir, guarda una copia del valor std:: match_results < BidirIt > ). El primer objeto puede leerse cuando se construye el iterador o cuando se realiza la primera desreferenciación. De lo contrario, la desreferenciación solo devuelve una copia de la coincidencia de regex obtenida más recientemente.
El iterador construido por defecto
std::regex_iterator
es el iterador de fin de secuencia. Cuando un
std::regex_iterator
válido se incrementa después de alcanzar la última coincidencia (
std::regex_search
devuelve
false
), se vuelve igual al iterador de fin de secuencia. Desreferenciarlo o incrementarlo más allá invoca comportamiento indefinido.
Una implementación típica de
std::regex_iterator
mantiene los iteradores de inicio y fin para la secuencia subyacente (dos instancias de
BidirIt
), un puntero a la expresión regular (
const
regex_type
*
), los indicadores de coincidencia (
std::regex_constants::match_flag_type
), y la coincidencia actual (
std::
match_results
<
BidirIt
>
).
Contenidos |
Requisitos de tipo
-
BidirIt
debe cumplir con los requisitos de
LegacyBidirectionalIterator
.
|
Especializaciones
Se definen varias especializaciones para tipos comunes de secuencias de caracteres:
|
Definido en el encabezado
<regex>
|
|
| Tipo | Definición |
std::cregex_iterator
|
std :: regex_iterator < const char * > |
std::wcregex_iterator
|
std :: regex_iterator < const wchar_t * > |
std::sregex_iterator
|
std :: regex_iterator < std:: string :: const_iterator > |
std::wsregex_iterator
|
std :: regex_iterator < std:: wstring :: const_iterator > |
Tipos de miembros
| Tipo | Definición |
value_type
|
std:: match_results < BidirIt > |
difference_type
|
std::ptrdiff_t |
pointer
|
const value_type * |
reference
|
const value_type & |
iterator_category
|
std::forward_iterator_tag |
iterator_concept
(C++20)
|
std::input_iterator_tag |
regex_type
|
std:: basic_regex < CharT, Traits > |
Miembros de datos
| Miembro | Descripción |
BidiIt
begin
(privado)
|
el iterador de inicio
( objeto miembro solo para exposición* ) |
BidiIt
end
(privado)
|
el iterador de fin
( objeto miembro solo para exposición* ) |
const
regex_type
*
pregex
(privado)
|
un puntero a una expresión regular
( objeto miembro solo para exposición* ) |
regex_constants
::
match_flag_type
flags
(privado)
|
un indicador
( objeto miembro solo para exposición* ) |
match_results
<
BidiIt
>
match
(privado)
|
la coincidencia actual
( objeto miembro solo para exposición* ) |
Funciones miembro
construye un nuevo
regex_iterator
(función miembro pública) |
|
|
(destructor)
(declarado implícitamente)
|
destruye un
regex_iterator
, incluyendo el valor almacenado en caché
(función miembro pública) |
|
asigna contenidos
(función miembro pública) |
|
|
(eliminado en C++20)
|
compara dos
regex_iterator
s
(función miembro pública) |
|
accede a la coincidencia actual
(función miembro pública) |
|
|
avanza el iterador a la siguiente coincidencia
(función miembro pública) |
Notas
Es responsabilidad del programador garantizar que el objeto std::basic_regex pasado al constructor del iterador sobreviva al iterador. Debido a que el iterador almacena un puntero al regex, incrementar el iterador después de que el regex haya sido destruido accede a un puntero colgante.
Si la parte de la expresión regular que coincide es solo una
aserción
(
^
,
$
,
\b
,
\B
), la coincidencia almacenada en el iterador es una coincidencia de longitud cero, es decir,
match
[
0
]
.
first
==
match
[
0
]
.
second
.
Ejemplo
#include <iostream> #include <iterator> #include <regex> #include <string> int main() { const std::string s = "Quick brown fox."; std::regex words_regex("[^\\s]+"); auto words_begin = std::sregex_iterator(s.begin(), s.end(), words_regex); auto words_end = std::sregex_iterator(); std::cout << "Found " << std::distance(words_begin, words_end) << " words:\n"; for (std::sregex_iterator i = words_begin; i != words_end; ++i) { std::smatch match = *i; std::string match_str = match.str(); std::cout << match_str << '\n'; } }
Salida:
Found 3 words: Quick brown fox.
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a estándares publicados anteriormente de C++.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
|
LWG 3698
( P2770R0 ) |
C++20 |
regex_iterator
era un
forward_iterator
mientras era un iterador con almacenamiento interno |
convertido en
input_iterator
[1]
|
-
↑
iterator_categoryno fue modificado por la resolución, porque cambiarlo a std::input_iterator_tag podría romper demasiado código existente.
Véase también
|
(C++11)
|
identifica una coincidencia de expresión regular, incluyendo todas las coincidencias de subexpresiones
(class template) |
|
(C++11)
|
intenta hacer coincidir una expresión regular con cualquier parte de una secuencia de caracteres
(function template) |