std:: regex_iterator
|
Défini dans l'en-tête
<regex>
|
||
|
template
<
class
BidirIt,
|
(depuis C++11) | |
std::regex_iterator
est un itérateur en lecture seule qui accède aux correspondances individuelles d'une expression régulière dans la séquence de caractères sous-jacente. Il satisfait aux exigences d'un
LegacyForwardIterator
, sauf que pour les valeurs déréférençables
a
et
b
avec
a
==
b
,
*
a
et
*
b
ne seront pas liés au même objet.
À la construction, et à chaque incrémentation, il appelle std::regex_search et mémorise le résultat (c'est-à-dire sauvegarde une copie de la valeur std:: match_results < BidirIt > ). Le premier objet peut être lu lors de la construction de l'itérateur ou lors du premier déréférencement. Sinon, le déréférencement ne renvoie qu'une copie de la correspondance d'expression régulière la plus récemment obtenue.
L'itérateur construit par défaut
std::regex_iterator
est l'itérateur de fin de séquence. Lorsqu'un
std::regex_iterator
valide est incrémenté après avoir atteint la dernière correspondance (
std::regex_search
retourne
false
), il devient égal à l'itérateur de fin de séquence. Le déréférencement ou l'incrémentation ultérieure invoque un comportement indéfini.
Une implémentation typique de
std::regex_iterator
contient les itérateurs de début et de fin pour la séquence sous-jacente (deux instances de
BidirIt
), un pointeur vers l'expression régulière (
const
regex_type
*
), les indicateurs de correspondance (
std::regex_constants::match_flag_type
), et la correspondance actuelle (
std::
match_results
<
BidirIt
>
).
Table des matières |
Exigences de type
-
BidirIt
doit satisfaire aux exigences de
LegacyBidirectionalIterator
.
|
Spécialisations
Plusieurs spécialisations pour les types courants de séquences de caractères sont définies :
|
Défini dans l'en-tête
<regex>
|
|
| Type | Définition |
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 > |
Types membres
| Type | Définition |
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 > |
Membres de données
| Membre | Description |
BidiIt
begin
(privé)
|
l'itérateur de début
( objet membre d'exposition uniquement* ) |
BidiIt
end
(privé)
|
l'itérateur de fin
( objet membre d'exposition uniquement* ) |
const
regex_type
*
pregex
(privé)
|
un pointeur vers une expression régulière
( objet membre d'exposition uniquement* ) |
regex_constants
::
match_flag_type
flags
(privé)
|
un drapeau
( objet membre d'exposition uniquement* ) |
match_results
<
BidiIt
>
match
(privé)
|
la correspondance actuelle
( objet membre d'exposition uniquement* ) |
Fonctions membres
construit un nouveau
regex_iterator
(fonction membre publique) |
|
|
(destructeur)
(déclaré implicitement)
|
détruit un
regex_iterator
, incluant la valeur mise en cache
(fonction membre publique) |
|
assigne le contenu
(fonction membre publique) |
|
|
(supprimé en C++20)
|
compare deux
regex_iterator
s
(fonction membre publique) |
|
accède à la correspondance actuelle
(fonction membre publique) |
|
|
avance l'itérateur vers la prochaine correspondance
(fonction membre publique) |
Notes
Il est de la responsabilité du programmeur de s'assurer que l'objet std::basic_regex passé au constructeur de l'itérateur survive à l'itérateur. Comme l'itérateur stocke un pointeur vers l'expression rationnelle, incrémenter l'itérateur après la destruction de l'expression rationnelle accède à un pointeur suspendu.
Si la partie de l'expression régulière qui correspond est simplement une
assertion
(
^
,
$
,
\b
,
\B
), la correspondance stockée dans l'itérateur est une correspondance de longueur zéro, c'est-à-dire,
match
[
0
]
.
first
==
match
[
0
]
.
second
.
Exemple
#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'; } }
Sortie :
Found 3 words: Quick brown fox.
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement publié | Comportement corrigé |
|---|---|---|---|
|
LWG 3698
( P2770R0 ) |
C++20 |
regex_iterator
était un
forward_iterator
tout en étant un itérateur à stockage |
transformé en
input_iterator
[1]
|
-
↑
iterator_categoryn'a pas été modifié par la résolution, car le changer en std::input_iterator_tag pourrait compromettre trop de code existant.
Voir aussi
|
(C++11)
|
identifie une correspondance d'expression régulière, incluant toutes les correspondances de sous-expressions
(modèle de classe) |
|
(C++11)
|
tente de faire correspondre une expression régulière à n'importe quelle partie d'une séquence de caractères
(modèle de fonction) |