Namespaces
Variants

std:: regex_iterator

From cppreference.net
Regular expressions library
Classes
(C++11)
Algorithms
Iterators
regex_iterator
(C++11)
Exceptions
Traits
Constants
(C++11)
Regex Grammar
Definiert in Header <regex>
template <

class BidirIt,
class CharT = typename std:: iterator_traits < BidirIt > :: value_type ,
class Traits = std:: regex_traits < CharT >

> class regex_iterator
(seit C++11)

std::regex_iterator ist ein schreibgeschützter Iterator, der auf die einzelnen Übereinstimmungen eines regulären Ausdrucks innerhalb der zugrunde liegenden Zeichensequenz zugreift. Es erfüllt die Anforderungen eines LegacyForwardIterator , mit der Ausnahme, dass für dereferenzierbare Werte a und b mit a == b , * a und * b nicht an dasselbe Objekt gebunden werden.

Bei der Erstellung und bei jedem Inkrement ruft es std::regex_search auf und speichert das Ergebnis (das heißt, es sichert eine Kopie des std:: match_results < BidirIt > -Werts). Das erste Objekt kann ausgelesen werden, wenn der Iterator erstellt wird oder wenn die erste Dereferenzierung erfolgt. Andernfalls gibt die Dereferenzierung nur eine Kopie des zuletzt erhaltenen Regex-Matches zurück.

Der standardmäßig konstruierte std::regex_iterator ist der End-of-Sequence-Iterator. Wenn ein gültiger std::regex_iterator nach Erreichen des letzten Treffers inkrementiert wird ( std::regex_search gibt false zurück), wird er gleich dem End-of-Sequence-Iterator. Das Dereferenzieren oder weitere Inkrementieren ruft undefiniertes Verhalten hervor.

Eine typische Implementierung von std::regex_iterator enthält die Start- und End-Iteratoren für die zugrundeliegende Sequenz (zwei Instanzen von BidirIt ), einen Zeiger auf den regulären Ausdruck ( const regex_type * ), die Match-Flags ( std::regex_constants::match_flag_type ) und den aktuellen Match ( std:: match_results < BidirIt > ).

Inhaltsverzeichnis

Typanforderungen

-
BidirIt muss die Anforderungen eines LegacyBidirectionalIterator erfüllen.

Spezialisierungen

Für häufige Zeichensequenztypen sind mehrere Spezialisierungen definiert:

Definiert im Header <regex>
Typ Definition
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 >

Mitgliedertypen

Typ Definition
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 >

Datenmitglieder

Mitglied Beschreibung
BidiIt begin (privat) der Begin-Iterator
( Nur-Darstellungs-Mitgliedsobjekt* )
BidiIt end (privat) der End-Iterator
( Nur-Darstellungs-Mitgliedsobjekt* )
const regex_type * pregex (privat) ein Zeiger auf einen regulären Ausdruck
( Nur-Darstellungs-Mitgliedsobjekt* )
regex_constants :: match_flag_type flags (privat) ein Flag
( Nur-Darstellungs-Mitgliedsobjekt* )
match_results < BidiIt > match (privat) der aktuelle Treffer
( Nur-Darstellungs-Mitgliedsobjekt* )

Memberfunktionen

konstruiert einen neuen regex_iterator
(öffentliche Elementfunktion)
(destructor)
(implizit deklariert)
zerstört einen regex_iterator , einschließlich des zwischengespeicherten Werts
(öffentliche Elementfunktion)
weist Inhalte zu
(öffentliche Elementfunktion)
(entfernt in C++20)
vergleicht zwei regex_iterator s
(öffentliche Elementfunktion)
greift auf die aktuelle Übereinstimmung zu
(öffentliche Elementfunktion)
bewegt den Iterator zur nächsten Übereinstimmung
(öffentliche Elementfunktion)

Hinweise

Es liegt in der Verantwortung des Programmierers sicherzustellen, dass das std::basic_regex -Objekt, das an den Konstruktor des Iterators übergeben wird, länger existiert als der Iterator. Da der Iterator einen Zeiger auf das Regex-Objekt speichert, führt das Inkrementieren des Iterators nach der Zerstörung des Regex-Objekts zum Zugriff auf einen hängenden Zeiger.

Wenn der Teil des regulären Ausdrucks, der übereinstimmt, nur eine Assertion ist ( ^ , $ , \b , \B ), dann ist die im Iterator gespeicherte Übereinstimmung eine Übereinstimmung der Länge Null, das heißt, match [ 0 ] . first == match [ 0 ] . second .

Beispiel

#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';
    }
}

Ausgabe:

Found 3 words:
Quick
brown
fox.

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 3698
( P2770R0 )
C++20 regex_iterator war ein forward_iterator
obwohl es ein stashing Iterator war
zu input_iterator geändert [1]
  1. iterator_category wurde durch die Resolution nicht geändert, da eine Änderung zu std::input_iterator_tag zu viel bestehenden Code brechen könnte.

Siehe auch

identifiziert einen regulären Ausdrucks-Treffer, einschließlich aller Teilausdrucks-Treffer
(Klassen-Template)
versucht, einen regulären Ausdruck mit einem beliebigen Teil einer Zeichensequenz abzugleichen
(Funktions-Template)