std::regex_constants::syntax_option_type
Definido en el archivo de encabezado <regex>
|
||
typedef /*no especificado*/ syntax_option_type; |
(desde C++11) | |
constexpr syntax_option_type icase = /*no especificado*/; constexpr syntax_option_type nosubs = /*no especificado*/; |
(desde C++11) (hasta C++17) |
|
inline constexpr syntax_option_type icase = /*no especificado*/; inline constexpr syntax_option_type nosubs = /*no especificado*/; |
(desde C++17) | |
syntax_option_type
es un tipo de máscara de bits (BitmaskType) que contiene opciones que gobiernan cómo se comportan las expresiones regulares.
Los valores posibles para este tipo (icase
, optimize
, etc.) se duplican dentro de std::basic_regex.
Contenido |
[editar] Constantes
Valor | Efecto(s) |
icase
|
La coincidencia de caracteres debe realizarse sin tener en cuenta las mayúsculas o minúsculas. |
nosubs
|
Al realizar coincidencias, todas las subexpresiones marcadas (expr) se tratan como subexpresiones que no dejan marcas (?:expr) . No se almacenan coincidencias en la estructura std::regex_match suministrada y mark_count() es cero.
|
optimize
|
Indica al motor de expresiones regulares que acelere la coincidencia, con el costo potencial de hacer que la construcción sea más lenta. Por ejemplo, esto podría significar convertir un autómata de estado finito no determinista en un autómata de estado finito determinista. |
collate
|
Los rangos de caracteres de la forma "[a-b]" serán sensibles a la configuración regional. |
multiline (C++17)
|
Especifica que ^ coincidirá con el comienzo de una línea y $ coincidirá con el final de una línea, si se selecciona el motor ECMAScript.
|
ECMAScript
|
Utilizar la Gramática modificada de expresiones regulares de ECMAScript |
basic
|
Utilizar la gramática básica de expresiones regulares POSIX (documentación de la gramática). |
extended
|
Utilizar la gramática extendida de expresiones regulares POSIX (documentación de la gramática). |
awk
|
Utilizar la gramática de expresiones regulares utilizada por la función de utilería awk en POSIX (documentación de la gramática) |
grep
|
Utilizar la gramática de expresiones regulares utilizada por la función de utilería grep en POSIX. Esto es efectivamente lo mismo que la opción basic con la adición de una nueva línea '\n' como separador de alternancia.
|
egrep
|
Utilizar la gramática de expresiones regulares utilizada por la función de utilería grep, con la opción -E, en POSIX. Esto es efectivamente lo mismo que la opción extended con la adición de una nueva línea '\n' como separador de alternancia además de '|'.
|
A lo sumo debe elegirse una opción de gramática de ECMAScript
, basic
, extended
, awk
, grep
, egrep
. Si no se elige una gramática, se supone que ECMAScript
está seleccionada. Las otras opciones sirven como modificadores, de modo que std::regex("miau", std::regex::icase) es equivalente a std::regex("miau", std::regex::ECMAScript|std::regex::icase).
[editar] Notas
Debido a que POSIX usa la regla de coincidencia "más larga a la izquierda" (la subsecuencia coincidente más larga coincide, y si hay varias de esas subsecuencias, la primera coincide), no es adecuado, por ejemplo, para analizar lenguajes de marcado: una expresión regular POSIX como "<tag[^>]*>.*</tag>" coincidiría con todo, desde la primera "<tag" hasta la última "</tag>", incluidas todas las "</tag>" y "<tag>" intermedias. Por otro lado, ECMAScript admite coincidencias no voraces, y la expresión regular "<tag[^>]*>.*?</tag>" de ECMAScript coincidiría solo hasta la primera etiqueta de cierre.
En C++11, estas constantes se especificaron con la palabra clave redundante static
, que fue eliminada por C++14 a mediante elasunto LWG 2053
[editar] Ejemplo
Ilustra la diferencia en el algoritmo de coincidencia entre las expresiones regulares ECMAScript y POSIX
#include <iostream> #include <string> #include <regex> int main() { std::string str = "zzxayyzz"; std::regex re1(".*(a|xayy)"); // ECMA std::regex re2(".*(a|xayy)", std::regex::extended); // POSIX std::cout << "Buscando .*(a|xayy) en zzxayyzz:\n"; std::smatch m; std::regex_search(str, m, re1); std::cout << " Coincidencia ECMA (búsqueda en profundidad): " << m[0] << '\n'; std::regex_search(str, m, re2); std::cout << " Coincidencia POSIX (más larga a la izquierda): " << m[0] << '\n'; }
Salida:
Buscando .*(a|xayy) en zzxayyzz: Coincidencia ECMA (búsqueda en profundidad): zzxa Coincidencia POSIX (más larga a la izquierda): zzxayy
[editar] Véase también
(C++11) |
Objeto de expresiones regulares. (plantilla de clase) |