Namensräume
Varianten
Aktionen

std::regex_match

Von cppreference.com
< cpp‎ | regex
 
 
 
Bibliothek für reguläre Ausdrücke
Klassen
(C++11)
Algorithmen
regex_match
(C++11)
Iteratoren
Ausnahmen
Traits
Konstanten
(C++11)
Reguläre Ausdrucksgrammatiken
 
Definiert in Header <regex>
template< class BidirIt, class Alloc, class CharT, class Traits >

bool regex_match( BidirIt first, BidirIt last,
                  std::match_results<BidirIt, Alloc>& m,
                  const std::basic_regex<CharT, Traits>& e,
                  std::regex_constants::match_flag_type flags =

                      std::regex_constants::match_default ();
(1) (seit C++11)
template< class BidirIt, class CharT, class Traits >

bool regex_match( BidirIt first, BidirIt last,
                  const std::basic_regex<CharT, Traits>& e,
                  std::regex_constants::match_flag_type flags =

                      std::regex_constants::match_default ();
(2) (seit C++11)
template< class CharT, class Alloc, class Traits >

bool regex_match( const CharT* str,
                  std::match_results<const CharT*, Alloc>& m,
                  const std::basic_regex<CharT, Traits>& e,
                  std::regex_constants::match_flag_type flags =

                      std::regex_constants::match_default ();
(3) (seit C++11)
template< class CharT, class Traits >

bool regex_match( const CharT* str, const std::basic_regex<CharT, Traits>& e,
                  std::regex_constants::match_flag_type flags =

                      std::regex_constants::match_default ();
(4) (seit C++11)
template< class STraits, class SAlloc, class Alloc,

          class CharT, class Traits >
bool regex_match
    ( const std::basic_string<CharT, STraits, SAlloc>& s,
      std::match_results
          <typename std::basic_string<CharT, STraits, SAlloc>::const_iterator,
           Alloc>& m,
      const std::basic_regex<CharT, Traits>& e,
      std::regex_constants::match_flag_type flags =

          std::regex_constants::match_default ();
(5) (seit C++11)
template< class STraits, class SAlloc, class CharT, class Traits >

bool regex_match( const std::basic_string<CharT, STraits, SAlloc>& s,
                  const std::basic_regex<CharT, Traits>& e,
                  std::regex_constants::match_flag_type flags =

                      std::regex_constants::match_default ();
(6) (seit C++11)
template< class STraits, class SAlloc, class Alloc,

          class CharT, class Traits >
bool regex_match
    ( const std::basic_string<CharT, STraits, SAlloc>&&,
      std::match_results
          <typename std::basic_string<CharT, STraits, SAlloc>::const_iterator,
           Alloc>&,
      const std::basic_regex<CharT, Traits>&,
      std::regex_constants::match_flag_type flags =

          std::regex_constants::match_default () = delete;
(7) (seit C++11)

Bestimmt, ob der reguläre Ausdruck e die gesamte Zielzeichenkette übereinstimmt. Das detaillierte Ergebnis des Abgleichs wird in m gespeichert (falls vorhanden).

1,2) Die Zielzeichenkette wird durch den Bereich [firstlast) repräsentiert.

Wenn BidirIt nicht die Anforderungen an einen LegacyBidirectionalIterator erfüllt, ist das Verhalten undefiniert.

(bis C++23)

Wenn BidirIt keinen bidirectional_iterator modelliert, ist das Verhalten undefiniert.

(seit C++23)
3,4) Die Zielzeichenkette wird durch den Bereich [strstr + std::char_traits<CharT>::length(str)) repräsentiert.
5,6) Die Zielzeichenkette wird durch die Zeichenkette s repräsentiert.
7) Die Zielzeichenkette kann nicht durch ein rvalue von std::string repräsentiert werden.

Wenn kein Abgleich gefunden wird, sollten die folgenden Ausdrücke mit m (falls vorhanden) die angegebenen Werte liefern

 Ausdruck   Wert 
m.ready() true
m.size() 0
m.empty() true

Wenn ein Abgleich gefunden wird, sollten für jede der unten aufgeführten Überladungen die folgenden Ausdrücke mit m für jede ganze Zahl n im Bereich (0m.size()) die angegebenen Werte liefern

      Ausdruck       Wert
           Überladung (1)                       Überladung (3)                       Überladung (5)           
m.ready() true
m.size() 1 + e.mark_count()
m.empty() false
m.prefix().first first str s.begin()
m.prefix().second
m.prefix().matched     false[1]
m.suffix().first last std::char_traits<CharT>::
    length(str) + str
s.end()
m.suffix().second
m.suffix().matched     false[2]
m[0].first first str s.begin()
m[0].second last std::char_traits<CharT>::
    length(str) + str
s.end()
m[0].matched     true[3]
m[n].first
  • last, wenn die markierte Teilausdruck n nicht am Abgleich teilgenommen hat
  • der Anfang der Zeichenkette, die sonst den Teilausdruck n abgleicht, ansonsten
m[n].second
  • last, wenn die markierte Teilausdruck n nicht am Abgleich teilgenommen hat
  • das Ende der Zeichenkette, die sonst den Teilausdruck n abgleicht, ansonsten
m[n].matched
  1. Der Abgleichpräfix ist leer.
  2. Der Abgleichsuffix ist leer.
  3. Die gesamte Zeichenkette wird abgeglichen.

Inhalt

[edit] Parameter

first, last - der Zielzeichenkettenbereich
str - die nullterminierte C-Style-Zeichenkette
s - die std::basic_string
m - die Abgleichresultate
e - der reguläre Ausdruck
flags - Flags, die bestimmen, wie der Abgleich durchgeführt werden soll

[edit] Rückgabewert

Gibt true zurück, wenn die gesamte Zielzeichenkette e entspricht, andernfalls false.

[edit] Anmerkungen

Da regex_match nur vollständige Übereinstimmungen berücksichtigt, kann derselbe reguläre Ausdruck zwischen regex_match und std::regex_search unterschiedliche Übereinstimmungen ergeben.

std::regex re("Get|GetValue");
std::cmatch m;
std::regex_search("GetValue", m, re);  // returns true, and m[0] contains "Get"
std::regex_match ("GetValue", m, re);  // returns true, and m[0] contains "GetValue"
std::regex_search("GetValues", m, re); // returns true, and m[0] contains "Get"
std::regex_match ("GetValues", m, re); // returns false

[edit] Beispiel

#include <cstddef>
#include <iostream>
#include <regex>
#include <string>
 
int main()
{
    // Simple regular expression matching
    const std::string fnames[] = {"foo.txt", "bar.txt", "baz.dat", "zoidberg"};
    const std::regex txt_regex("[a-z]+\\.txt");
 
    for (const auto& fname : fnames)
        std::cout << fname << ": " << std::regex_match(fname, txt_regex) << '\n';
 
    // Extraction of a sub-match
    const std::regex base_regex("([a-z]+)\\.txt");
    std::smatch base_match;
 
    for (const auto& fname : fnames)
        if (std::regex_match(fname, base_match, base_regex))
            // The first sub_match is the whole string; the next
            // sub_match is the first parenthesized expression.
            if (base_match.size() == 2)
            {
                std::ssub_match base_sub_match = base_match[1];
                std::string base = base_sub_match.str();
                std::cout << fname << " has a base of " << base << '\n';
            }
 
    // Extraction of several sub-matches
    const std::regex pieces_regex("([a-z]+)\\.([a-z]+)");
    std::smatch pieces_match;
 
    for (const auto& fname : fnames)
        if (std::regex_match(fname, pieces_match, pieces_regex))
        {
            std::cout << fname << '\n';
            for (std::size_t i = 0; i < pieces_match.size(); ++i)
            {
                std::ssub_match sub_match = pieces_match[i];
                std::string piece = sub_match.str();
                std::cout << "  submatch " << i << ": " << piece << '\n';
            }
        }
}

Ausgabe

foo.txt: 1
bar.txt: 1
baz.dat: 0
zoidberg: 0
foo.txt has a base of foo
bar.txt has a base of bar
foo.txt
  submatch 0: foo.txt
  submatch 1: foo
  submatch 2: txt
bar.txt
  submatch 0: bar.txt
  submatch 1: bar
  submatch 2: txt
baz.dat
  submatch 0: baz.dat
  submatch 1: baz
  submatch 2: dat

[edit] 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 2205 C++11 n könnte Null sein in der Nachbedingung kann nur positiv sein
LWG 2273 C++11 es war unklar, ob partielle Übereinstimmungen berücksichtigt werden berücksichtigt nur vollständige Übereinstimmungen
LWG 2329 C++11 Überladung (5) akzeptierte basic_string rvalues,
was zu hängenden Iteratoren führen konnte
zurückgewiesen durch gelöschte Überladung (7)

[edit] Siehe auch

Objekt für reguläre Ausdrücke
(Klassenvorlage) [bearbeiten]
identifiziert eine Übereinstimmung eines regulären Ausdrucks, einschließlich aller Übereinstimmungen von Unterausdrücken
(Klassenvorlage) [bearbeiten]
versucht, einen regulären Ausdruck an einen beliebigen Teil einer Zeichensequenz anzupassen
(Funktionsvorlage) [bearbeiten]