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 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
(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) |