Espacios de nombres
Variantes
Acciones

std::regex_match

De cppreference.com
< cpp‎ | regex
Definido en el archivo de encabezado <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) (desde 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) (desde 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) (desde 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 );
(4) (desde 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 );
(5) (desde 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) (desde 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) (desde C++11)

Determina si la expresión regular e coincide con la secuencia completa de caracteres de destino, que puede especificarse como std::string, una cadena estilo C, o un par de iteradores.

1) Determina si hay una coincidencia entre la expresión regular e y toda la secuencia de caracteres de destino [first,last), teniendo en cuenta el efecto de flags. Al determinar si hay una coincidencia, solo se consideran las coincidencias potenciales que coinciden con la secuencia completa de caracteres. Los resultados de la coincidencia se devuelven en m.
2) Se comporta como (1) anteriormente, omitiendo los resultados de la coincidencia.
3) Devuelve std::regex_match(str, str + std::char_traits<charT>::length(str), m, e, flags).
4) Devuelve std::regex_match(s.begin(), s.end(), m, e, flags).
5) Devuelve std::regex_match(str, str + std::char_traits<charT>::length(str), e, flags).
6) Devuelve std::regex_match(s.begin(), s.end(), e, flags).
7) Se prohíbe que la sobrecarga (4) acepte cadenas temporales, de lo contrario esta función rellena match_results m con iteradores de cadena que se vuelven inválidos inmediatamente.

Ten en cuenta que regex_match solo hará coincidir correctamente una expresión regular con una secuencia de caracteres completa, mientras que std::regex_search coincidirá correctamente con subsecuencias.

Contenido

[editar] Parámetros

first, last - El rango de caracteres de destino al que aplicar la expresión regular, dado como iteradores.
m - Los resultados de la coincidencia.
str - La cadena de destino, dada como una cadena estilo C terminada en nulo.
s - La cadena de destino, dada como un std::basic_string.
e - La expresión regular.
flags - Indicadores utilizados para determinar cómo se realizará la coincidencia.
Requisitos de tipo
-
BidirIt debe satisfacer los requisitos de BidirectionalIterator.

[editar] Valor de retorno

Devuelve true si existe una coincidencia, false de lo contrario. En cualquier caso, el objeto m se actualiza de la siguiente manera:

Si la coincidencia no existe:

m.ready() == true
m.empty() == true
m.size() == 0

Si la coincidencia existe:

m.ready() true
m.empty() false
m.size() El número de subexpresiones marcadas más 1, es decir, 1+e.mark_count().
m.prefix().first first
m.prefix().second first
m.prefix().matched false (el prefijo de coincidencia está vacío)
m.suffix().first last
m.suffix().second last
m.suffix().matched false (el sufijo de coincidencia está vacío)
m[0].first first
m[0].second last
m[0].matched true (se ha coincidido toda la secuencia)
m[n].first El principio de la secuencia que coincidió con la subexpresión marcada n, o last si la subexpresión no participó en la coincidencia.
m[n].second El final de la secuencia que coincidió con la subexpresión marcada n, o last si la subexpresión no participó en la coincidencia.
m[n].matched true si la subexpresión n participó en la coincidencia, false de lo contrario.

[editar] Notas

Debido a que regex_match solo considera coincidencias completas, la misma expresión regular puede dar diferentes coincidencias entre regex_match y std::regex_search:

std::regex re("Get|GetValue");
std::cmatch m;
std::regex_search("GetValue", m, re);  // devuelve true, y m[0] contiene "Get"
std::regex_match ("GetValue", m, re);  // devuelve true, y m[0] contiene "GetValue"
std::regex_search("GetValues", m, re); // devuelve true, y m[0] contiene "Get"
std::regex_match ("GetValues", m, re); // devuelve false

[editar] Ejemplo

#include <iostream>
#include <string>
#include <regex>
 
int main()
{
    // Coincidencia de una expresión regular simple
    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';
    }   
 
    // Extracción de una subcoincidencia
    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)) {
            // la primera subcoincidencia es toda la cadena; la próxima
            // subcoincidencia es la primera expresión entre paréntesis
            if (base_match.size() == 2) {
                std::ssub_match base_sub_match = base_match[1];
                std::string base = base_sub_match.str();
                std::cout << fname << " tiene una base de " << base << '\n';
            }
        }
    }
 
    // Extracción de varias subcoincidencias
    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 (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 << "  subcoincidencia " << i << ": " << piece << '\n';
            }   
        }   
    }   
}

Salida:

foo.txt: 1
bar.txt: 1
baz.dat: 0
zoidberg: 0
foo.txt tiene una base de foo
bar.txt has a base of bar
foo.txt
  subcoincidencia 0: foo.txt
  subcoincidencia 1: foo
  subcoincidencia 2: txt
bar.txt
  subcoincidencia 0: bar.txt
  subcoincidencia 1: bar
  subcoincidencia 2: txt
baz.dat
  subcoincidencia 0: baz.dat
  subcoincidencia 1: baz
  subcoincidencia 2: dat

[editar] Informes de defectos

Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.

ID Aplicado a Comportamiento según lo publicado Comportamiento correcto
LWG 2329 C++11 Se aceptaban r-valores basic_string, que probablemente daría lugar a iteradores pendientes. Se rechazaron mediante una sobrecarga eliminada.

[editar] Véase también

Objeto de expresiones regulares.
(plantilla de clase) [editar]
Identifica una coincidencia de expresión regular, incluyendo todas las coincidencias de subexpresión.
(plantilla de clase) [editar]
Intenta coincidir una expresión regular con cualquier parte de una secuencia de caracteres.
(plantilla de función) [editar]