Espacios de nombres
Variantes
Acciones

std::regex_constants::syntax_option_type

De cppreference.com
< cpp‎ | regex
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*/;
constexpr syntax_option_type optimize = /*no especificado*/;
constexpr syntax_option_type collate = /*no especificado*/;
constexpr syntax_option_type ECMAScript = /*no especificado*/;
constexpr syntax_option_type basic = /*no especificado*/;
constexpr syntax_option_type extended = /*no especificado*/;
constexpr syntax_option_type awk = /*no especificado*/;
constexpr syntax_option_type grep = /*no especificado*/;

constexpr syntax_option_type egrep = /*no especificado*/;
(desde C++11)
(hasta C++17)
inline constexpr syntax_option_type icase = /*no especificado*/;

inline constexpr syntax_option_type nosubs = /*no especificado*/;
inline constexpr syntax_option_type optimize = /*no especificado*/;
inline constexpr syntax_option_type collate = /*no especificado*/;
inline constexpr syntax_option_type ECMAScript = /*no especificado*/;
inline constexpr syntax_option_type basic = /*no especificado*/;
inline constexpr syntax_option_type extended = /*no especificado*/;
inline constexpr syntax_option_type awk = /*no especificado*/;
inline constexpr syntax_option_type grep = /*no especificado*/;
inline constexpr syntax_option_type egrep = /*no especificado*/;

inline constexpr syntax_option_type multiline = /*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

Objeto de expresiones regulares.
(plantilla de clase) [editar]