std::regex_match
Definido en el archivo de encabezado <regex> | ||
template<class BidirIt, class Alloc, class CharT, class Traits > | (1) | (desde C++11) |
template<class BidirIt, class CharT, class Traits > | (2) | (desde C++11) |
template<class CharT, class Alloc, class Traits > bool regex_match(const CharT* str, | (3) | (desde C++11) |
template<class STraits, class SAlloc, class Alloc, class CharT, class Traits > | (4) | (desde C++11) |
template<class CharT, class Traits > bool regex_match(const CharT* str, | (5) | (desde C++11) |
template<class STraits, class SAlloc, class CharT, class Traits > | (6) | (desde C++11) |
template<class STraits, class SAlloc, class Alloc, class CharT, class Traits > | (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.
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
.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 marcadan , 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 marcadan , 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 simpleconststd::string fnames[]={"foo.txt", "bar.txt", "baz.dat", "zoidberg"};conststd::regex txt_regex("[a-z]+\\.txt"); for(constauto&fname : fnames){std::cout<< fname <<": "<< std::regex_match(fname, txt_regex)<<'\n';} // Extracción de una subcoincidenciaconststd::regex base_regex("([a-z]+)\\.txt");std::smatch base_match; for(constauto&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éntesisif(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 subcoincidenciasconststd::regex pieces_regex("([a-z]+)\\.([a-z]+)");std::smatch pieces_match; for(constauto&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
(C++11) | Objeto de expresiones regulares. (plantilla de clase) |
(C++11) | Identifica una coincidencia de expresión regular, incluyendo todas las coincidencias de subexpresión. (plantilla de clase) |
(C++11) | Intenta coincidir una expresión regular con cualquier parte de una secuencia de caracteres. (plantilla de función) |