Compartir vía


Expresiones regulares (C++)

La biblioteca estándar de C++ admite varias gramáticas de expresiones regulares. En este tema se describen las variaciones gramaticales disponibles al usar expresiones regulares.

Gramática de expresiones regulares

La gramática de expresiones regulares que se va a usar se especifica mediante el uso de uno de los std::regex_constants::syntax_option_type valores de enumeración. Estas gramáticas de expresiones regulares se definen en std::regex_constants:

  • ECMAScript: es lo más cercano a la gramática que usa JavaScript y los lenguajes .NET.
  • basic: expresiones regulares POSIX basic o BRE.
  • extended: expresiones regulares POSIX extended o ERE.
  • awk: es extended, pero tiene más escapes para caracteres que no son de impresión.
  • grep: es basic, pero también permite que los caracteres de nueva línea (\n) separe las alternancias.
  • egrep: es extended, pero también permite que los caracteres de nueva línea separen alternancias.

De forma predeterminada, si no se especifica ninguna gramática, ECMAScript se supone. Solo se puede especificar una gramática.

También se pueden aplicar varias marcas:

  • icase: omita mayúsculas y minúsculas al buscar coincidencias.
  • nosubs: omitir coincidencias marcadas (es decir, expresiones entre paréntesis); no se almacenan las sustituciones.
  • optimize: hacer que la coincidencia sea más rápida, a costa posible de un mayor tiempo de construcción.
  • collate: use secuencias de intercalación que distinguen la configuración regional (por ejemplo, intervalos del formulario [a-z]).

Se pueden combinar cero o más marcas con la gramática para especificar el comportamiento del motor de expresiones regulares. Si solo se especifican marcas, ECMAScript se supone que es la gramática.

Elemento

Un elemento puede ser uno de los siguientes:

  • Carácter normal que coincide con el mismo carácter en la secuencia de destino.

  • Carácter comodín'.' que coincide con cualquier carácter de la secuencia de destino, excepto una nueva línea.

  • Expresión de corchetes del formulario [expr], que coincide con un carácter o un elemento de intercalación en la secuencia de destino que también está en el conjunto definido por la expresión expr, o del formulario [^expr], que coincide con un carácter o un elemento de intercalación en la secuencia de destino que no está en el conjunto definido por la expresión expr.

    La expresión expr puede contener cualquier combinación de lo siguiente:

    • Un carácter individual. Agrega el carácter al conjunto definido por expr.

    • Intervalo de caracteres del formulario ch1-ch2. Agrega los caracteres representados por valores del intervalo [ch1, ch2] cerrado al conjunto definido por expr.

    • Clase de caracteres del formulario [:name:]. Agrega los caracteres de la clase con nombre al conjunto definido por expr.

    • Clase de equivalencia del formulario [=elt=]. Agrega los elementos de intercalación equivalentes al elt conjunto definido por expr.

    • Símbolo de intercalación del formulario [.elt.]. Agrega el elemento elt de intercalación al conjunto definido por expr.

  • Un delimitador. Anchor ^ coincide con el principio de la secuencia de destino. Anchor $ coincide con el final de la secuencia de destino.

  • Un grupo de captura del formulario (subexpresión) o \(subexpression\) en basic y grep, que coincide con la secuencia de caracteres de la secuencia de destino que coincide con el patrón entre los delimitadores.

  • Un escape de identidad del formulario \k, que coincide con el carácter k de la secuencia de destino.

Ejemplos:

  • a coincide con la secuencia "a" de destino, pero no coincide con las secuencias "B"de destino , "b"o "c".

  • . coincide con todas las secuencias "a"de destino , "B", "b"y "c".

  • [b-z] coincide con las secuencias "b" de destino y "c" , pero no coincide con las secuencias "a" de destino o "B".

  • [:lower:] coincide con las secuencias "a"de destino , "b"y "c" , pero no coincide con la secuencia "B"de destino .

  • (a) coincide con la secuencia "a" de destino y asocia el grupo de captura 1 con la subsecuencia "a", pero no coincide con las secuencias "B"de destino , "b"o "c".

En ECMAScript, basicy grep, un elemento también puede ser una referencia inversa del formulario \dd, donde dd representa un valor decimal N que coincide con una secuencia de caracteres de la secuencia de destino que es la misma que la secuencia de caracteres que coincide con el grupo de captura Nth.

Por ejemplo, coincide con la secuencia "aa" de destino porque el primer grupo de captura (y solo) coincide con la secuencia "a" inicial y, a continuación, (a)\1\1 coincide con la secuencia "a"final .

En ECMAScript, un elemento también puede ser uno de los siguientes:

  • Un grupo que no es de captura del formulario (?: subexpresión). Coincide con la secuencia de caracteres de la secuencia de destino que coincide con el patrón entre los delimitadores.

  • Escape de formato de archivo limitado del formato \f, , \r\n, \to .\v Coinciden con una fuente de formularios, nueva línea, retorno de carro, tabulación horizontal y pestaña vertical, respectivamente, en la secuencia de destino.

  • Una aserción positiva del formulario (= subexpresión). Coincide con la secuencia de caracteres de la secuencia de destino que coincide con el patrón entre los delimitadores, pero no cambia la posición de coincidencia en la secuencia de destino.

  • Una aserción negativa del formulario (! subexpresión). Coincide con cualquier secuencia de caracteres de la secuencia de destino que no coincida con el patrón entre los delimitadores y no cambia la posición de coincidencia en la secuencia de destino.

  • Secuencia de escape hexadecimal del formato \xhh. Coincide con un carácter de la secuencia de destino representada por los dos dígitos hhhexadecimales .

  • Secuencia de escape unicode del formato \uhhhh. Coincide con un carácter de la secuencia de destino representada por los cuatro dígitos hhhhhexadecimales .

  • Secuencia de escape de control del formato \ck. Coincide con el carácter de control denominado por el carácter k.

  • Una aserción de límite de palabras con el formato \b. Coincide cuando la posición actual de la secuencia de destino es inmediatamente después de un límite de palabras.

  • Una aserción de límite de palabra negativa del formulario \B. Coincide cuando la posición actual de la secuencia de destino no está inmediatamente después de un límite de palabras.

  • Un escape de caracteres dsw de la forma \d, , \D\s, \S, \w, \W. Proporciona un nombre corto para una clase de caracteres.

Ejemplos:

  • (?:a) coincide con la secuencia "a"de destino , pero "(?:a)\1" no es válida porque no hay ningún grupo de captura 1.

  • (=a)a coincide con la secuencia "a"de destino . La aserción positiva coincide con la secuencia "a" inicial de la secuencia de destino y la final "a" de la expresión regular coincide con la secuencia "a" inicial de la secuencia de destino.

  • (!a)a no coincide con la secuencia "a"de destino .

  • a\b. coincide con la secuencia "a~"de destino , pero no coincide con la secuencia "ab"de destino .

  • a\B. coincide con la secuencia "ab"de destino , pero no coincide con la secuencia "a~"de destino .

En awk, un elemento también puede ser uno de los siguientes:

  • Un escape de formato de archivo con el formato \\, , \n\b\f\a, \r, \to .\v Coinciden con una barra diagonal inversa, alerta, retroceso, avance de formulario, nueva línea, retorno de carro, tabulación horizontal y pestaña vertical, respectivamente, en la secuencia de destino.

  • Secuencia de escape octal del formato \ooo. Coincide con un carácter de la secuencia de destino cuya representación es el valor representado por los dígitos ooouno, dos o tres octales .

Repetición

Cualquier elemento que no sea una aserción positiva, una aserción negativa o un delimitador puede ir seguido de un recuento de repeticiones. El tipo más general de recuento de repeticiones toma la forma {min,max}, o \{min,max\} en basic y grep. Un elemento seguido de esta forma de recuento de repeticiones coincide con al menos las repeticiones sucesivas mínimas y no más que las repeticiones sucesivas máximas de una secuencia que coincide con el elemento.

Por ejemplo, a{2,3} coincide con la secuencia "aa" de destino y la secuencia "aaa"de destino , pero no la secuencia "a" de destino o la secuencia "aaaa"de destino .

Un recuento de repeticiones también puede adoptar una de las formas siguientes:

  • {min} o \{min} en basic y grep. Equivalente a {min,min}.

  • {min,} o \{min,\} en basic y grep. Equivalente a {min,unbounded}.

  • * es equivalente a {0,unbounded}.

Ejemplos:

  • a{2} coincide con la secuencia "aa" de destino, pero no la secuencia "a" de destino o la secuencia "aaa"de destino .

  • a{2,} coincide con la secuencia "aa"de destino , la secuencia "aaa"de destino , etc., pero no coincide con la secuencia "a"de destino .

  • a* coincide con la secuencia ""de destino , la secuencia "a"de destino , la secuencia "aa"de destino , etc.

Para todas las gramáticas excepto basic y grep, un recuento de repeticiones también puede adoptar una de las formas siguientes:

  • ? equivale a {0,1}.

  • + es equivalente a {1,unbounded}.

Ejemplos:

  • a? coincide con la secuencia "" de destino y la secuencia "a"de destino , pero no con la secuencia "aa"de destino .

  • a+ coincide con la secuencia "a"de destino , la secuencia "aa"de destino , etc., pero no la secuencia ""de destino .

En ECMAScript, todas las formas de recuento de repeticiones pueden ir seguidas del carácter ? que designa una repetición no expansiva.

Concatenación

Los elementos de expresión regular, con o sin recuentos de repeticiones, se pueden concatenar para formar expresiones regulares más largas. La expresión resultante coincide con una secuencia de destino que es una concatenación de las secuencias que coinciden con los elementos individuales.

Por ejemplo, a{2,3}b coincide con la secuencia "aab" de destino y la secuencia "aaab"de destino , pero no coincide con la secuencia "ab" de destino o la secuencia "aaaab"de destino .

Alternancia

En todas las gramáticas de expresiones regulares excepto basic y grep, una expresión regular concatenada puede ir seguida del carácter | (canalización) y otra expresión regular concatenada. Cualquier número de expresiones regulares concatenadas se puede combinar de esta manera. La expresión resultante coincide con cualquier secuencia de destino que coincida con una o varias de las expresiones regulares concatenadas.

Cuando más de una de las expresiones regulares concatenadas coinciden con la secuencia de destino, ECMAScript elige la primera de las expresiones regulares concatenadas que coinciden con la secuencia como coincidencia, a la que se hará referencia como la primera coincidencia. Las otras gramáticas de expresiones regulares eligen la que logra la coincidencia más larga.

Por ejemplo, ab|cd coincide con la secuencia "ab" de destino y la secuencia "cd"de destino , pero no coincide con la secuencia "abd" de destino o la secuencia "acd"de destino .

En grep y egrep, se puede usar un carácter de nueva línea (\n) para separar las alternancias.

Subexpresión

En basic y grep, una subexpresión es una concatenación. En las otras gramáticas de expresiones regulares, una subexpresión es una alternancia.

Resumen de gramática

En la tabla siguiente se resumen las características disponibles en las diversas gramáticas de expresiones regulares:

Elemento basic extended ECMAScript grep egrep awk
alternancia mediante | + + + +
alternancia mediante \n + +
anchor + + + + + +
referencia inversa + + +
expresión de corchetes + + + + + +
grupo de captura mediante () + + + +
grupo de captura mediante \(\) + +
secuencia de escape de control +
Escape de caracteres dsw +
escape de formato de archivo + +
Secuencia de escape hexadecimal +
escape de identidad + + + + + +
aserción negativa +
confirmación de límite de palabra negativa +
grupo que no es de captura +
repetición no expansiva +
secuencia de escape octal +
Carácter normal + + + + + +
aserción positiva +
repetición mediante {} + + + +
repetición mediante \{\} + +
repetición mediante * + + + + + +
repetición mediante ? y + + + + +
Secuencia de escape unicode +
carácter comodín + + + + + +
aserción de límite de palabras +

Detalles semánticos

Anchor

Un delimitador coincide con una posición en la cadena de destino, no un carácter. Coincide ^ con el principio de la cadena de destino y coincide $ con el final de la cadena de destino.

Referencia inversa

Una referencia inversa es una barra diagonal inversa seguida de un valor decimal N. Coincide con el contenido del grupo de captura N. El valor de N no debe ser mayor que el número de grupos de captura que preceden a la referencia inversa. En basic y grep, el valor de N viene determinado por el dígito decimal que sigue a la barra diagonal inversa. En ECMAScript, el valor de N viene determinado por todos los dígitos decimales que siguen inmediatamente la barra diagonal inversa. Por lo tanto, en basic y grep, el valor de N nunca es superior a 9, incluso si la expresión regular tiene más de nueve grupos de captura. En ECMAScript, el valor de N no está enlazado.

Ejemplos:

  • ((a+)(b+))(c+)\3 coincide con la secuencia "aabbbcbbb"de destino . La referencia \3 inversa coincide con el texto del tercer grupo de captura, es decir, ."(b+)" No coincide con la secuencia "aabbbcbb"de destino .

  • (a)\2 no es válido.

  • (b(((((((((a))))))))))\10 tiene significados diferentes en basic y en ECMAScript. En basic, la referencia inversa es \1. La referencia inversa coincide con el contenido del primer grupo de captura (es decir, el que comienza con y termina con (b la final ) y viene antes de la referencia de retroceso) y la final 0 coincide con el carácter 0ordinario . En ECMAScript, la referencia inversa es \10. Coincide con el décimo grupo de captura, es decir, el más interno.

Expresión de corchetes

Una expresión de corchetes define un conjunto de caracteres y elementos de intercalación. Cuando la expresión entre corchetes comienza con el carácter ^ , la coincidencia se realiza correctamente si ningún elemento del conjunto coincide con el carácter actual de la secuencia de destino. De lo contrario, la coincidencia se realiza correctamente si alguno de los elementos del conjunto coincide con el carácter actual de la secuencia de destino.

El conjunto de caracteres se puede definir enumerando cualquier combinación de caracteres individuales, intervalos de caracteres, clases de caracteres, clases de equivalencia y símbolosde intercalación.

Grupo de captura

Un grupo de captura marca su contenido como una sola unidad en la gramática de expresiones regulares y etiqueta el texto de destino que coincide con su contenido. La etiqueta asociada a cada grupo de capturas es un número, que se determina contando los paréntesis de apertura que marcan los grupos de captura hasta e incluyendo el paréntesis de apertura que marca el grupo de captura actual. En esta implementación, el número máximo de grupos de captura es 31.

Ejemplos:

  • ab+ coincide con la secuencia "abb"de destino , pero no coincide con la secuencia "abab"de destino .

  • (ab)+ no coincide con la secuencia "abb"de destino , pero coincide con la secuencia "abab"de destino .

  • ((a+)(b+))(c+)coincide con la secuencia "aabbbc" de destino y asocia el grupo de captura 1 con la subsecuencia "aabbb", el grupo de captura 2 con la subsecuencia , el grupo de captura 3 con "bbb"y el grupo de captura 4 con la subsecuencia "aa""c".

Clase de personaje

Una clase de caracteres en una expresión entre corchetes agrega todos los caracteres de la clase con nombre al conjunto de caracteres definido por la expresión de corchetes. Para crear una clase de caracteres, use [: seguido del nombre de la clase, seguido de :].

Internamente, los nombres de las clases de caracteres se reconocen llamando a id = traits.lookup_classname. Un carácter ch pertenece a dicha clase si traits.isctype(ch, id) devuelve true. La plantilla predeterminada regex_traits admite los nombres de clase de la tabla siguiente.

Class Name (Nombre de clase) Description
alnum letras minúsculas, letras mayúsculas y dígitos
alpha letras minúsculas y mayúsculas
blank espacio o pestaña
cntrl caracteres de escape de formato de archivo
digit dígitos
graph letras minúsculas, letras mayúsculas, dígitos y puntuación
lower letras minúsculas
print letras minúsculas, letras mayúsculas, dígitos, puntuación y espacio
punct puntuación
space espacio
upper Caracteres en mayúsculas
xdigit dígitos, a, b, , dc, e, fACB, , DEF
d igual que digit
s igual que space
w igual que alnum

Intervalo de caracteres

Un intervalo de caracteres en una expresión entre corchetes agrega todos los caracteres del intervalo al conjunto de caracteres definido por la expresión de corchetes. Para crear un intervalo de caracteres, coloque el carácter '-' entre los caracteres primero y último del intervalo. Un intervalo de caracteres coloca todos los caracteres que tienen un valor numérico mayor o igual que el valor numérico del primer carácter, y menor o igual que el valor numérico del último carácter, en el conjunto. Observe que este conjunto de caracteres agregados depende de la representación específica de la plataforma de caracteres. Si el carácter '-' se produce al principio o al final de una expresión de corchetes, o como primer o último carácter de un intervalo de caracteres, se representa a sí mismo.

Ejemplos:

  • [0-7]representa el conjunto de caracteres { 0, 14352, , 6, 7 } . Coincide con las secuencias "0"de destino , "1", etc., pero no "a".

  • En los sistemas que usan codificación de caracteres ASCII, [h-k] representa el conjunto de caracteres { h, i, j, k }. Coincide con las secuencias "h"de destino , "i", etc., pero no "\x8A" con o "0".

  • En los sistemas que usan codificación de caracteres EBCDIC, [h-k] representa el conjunto de caracteres { h, '\x8A''\x8E''\x8D''\x90''\x8B'i'\x8C''\x8F', j} k (h se codifica como 0x88 y k se codifica como ).0x92 Coincide con las secuencias "h"de destino , "i", "\x8A", etc., pero no "0".

  • [-0-24] representa el conjunto de caracteres { -, 0, 1, 2, 4 } .

  • [0-2-] representa el conjunto de caracteres { 0, 1, 2, - } .

  • En los sistemas que usan codificación de caracteres ASCII, [+--] representa el conjunto de caracteres { +,- }.

Sin embargo, cuando se usan intervalos que distinguen la configuración regional, los caracteres de un intervalo se determinan mediante las reglas de intercalación de la configuración regional. Los caracteres que se intercalan después del primer carácter de la definición del intervalo y antes del último carácter de la definición del intervalo se encuentran en el conjunto. Los dos caracteres finales también están en el conjunto.

Elemento Collating

Un elemento de intercalación es una secuencia de varios caracteres que se trata como un solo carácter.

Símbolo de intercalación

Un símbolo de intercalación en una expresión entre corchetes agrega un elemento de intercalación al conjunto definido por la expresión de corchetes. Para crear un símbolo de intercalación, use [. seguido del elemento de intercalación, seguido de .]

Secuencia de escape de control

Una secuencia de escape de control es una barra diagonal inversa seguida de la letra 'c' seguida de una de las letras 'a' a través 'z' de o 'A' a través de 'Z'. Coincide con el carácter de control ASCII denominado por esa letra. Por ejemplo, "\ci" coincide con la secuencia "\x09"de destino , porque Ctrl+I tiene el valor 0x09.

Escape de caracteres DSW

Un escape de caracteres dsw es un nombre corto para una clase de caracteres, como se muestra en la tabla siguiente.

Secuencia de escape Clase con nombre equivalente Clase con nombre predeterminada
\d [[:d:]] [[:digit:]]
\D [^[:d:]] [^[:digit:]]
\s [[:s:]] [[:space:]]
\S [^[:s:]] [^[:space:]]
\w [[:w:]] [a-zA-Z0-9_]*
\W [^[:w:]] [^a-zA-Z0-9_]*

*Juego de caracteres ASCII

Equivalencia (clase)

Una clase de equivalencia en una expresión entre corchetes agrega todos los caracteres y elementos de intercalación equivalentes al elemento de intercalación de la definición de clase de equivalencia al conjunto definido por la expresión de corchetes.

Para crear una clase de equivalencia, use [= seguido de un elemento de intercalación seguido de =]. Internamente, dos elementos elt1 de intercalación y elt2 son equivalentes si traits.transform_primary(elt1.begin(), elt1.end()) == traits.transform_primary(elt2.begin(), elt2.end()).

Escape de formato de archivo

Un escape de formato de archivo consta de las secuencias de escape de caracteres de lenguaje C habituales, \\, \n\a\f\r\b, . \v\t Tienen los significados habituales, es decir, barra diagonal inversa, alerta, retroceso, avance de formulario, nueva línea, retorno de carro, tabulación horizontal y pestaña vertical, respectivamente. En ECMAScripty \a\b no se permiten. (\\ se permite, pero es un escape de identidad, no un escape de formato de archivo).

Secuencia de escape hexadecimal

Una secuencia de escape hexadecimal es una barra diagonal inversa seguida de la letra x seguida de dos dígitos hexadecimales (0-9a-fA-F). Coincide con un carácter de la secuencia de destino que tiene el valor especificado por los dos dígitos.

Por ejemplo, "\x41" coincide con la secuencia "a" de destino cuando se usa la codificación de caracteres ASCII.

Escape de identidad

Un escape de identidad es una barra diagonal inversa seguida de un solo carácter. Coincide con ese carácter. Es necesario cuando el carácter tiene un significado especial. El uso del escape de identidad quita el significado especial. Por ejemplo:

  • a* coincide con la secuencia "aaa"de destino , pero no coincide con la secuencia "a*"de destino .

  • a\* no coincide con la secuencia "aaa"de destino , pero coincide con la secuencia "a*"de destino .

El conjunto de caracteres permitidos en un escape de identidad depende de la gramática de expresiones regulares, como se muestra en la tabla siguiente.

Gramática Caracteres de escape de identidad permitidos
basic, grep { ($^*[}\){.}
extended, egrep { (|?+$^\.*){[}
awk, extended plus { "/ }
ECMAScript Todos los caracteres excepto aquellos que pueden formar parte de un identificador. Normalmente, esto incluye letras, dígitos, $, _y secuencias de escape unicode. Para obtener más información, consulte La especificación del ECMAScript lenguaje.

Carácter individual

Un carácter individual de una expresión entre corchetes agrega ese carácter al conjunto de caracteres definido por la expresión de corchetes. En cualquier lugar de una expresión entre corchetes excepto al principio, un ^ objeto se representa a sí mismo.

Ejemplos:

  • [abc] coincide con las secuencias "a"de destino , "b"y "c", pero no con la secuencia "d".

  • [^abc] coincide con la secuencia "d"de destino , pero no las secuencias "a"de destino , "b"o "c".

  • [a^bc] coincide con las secuencias "a"de destino , "b", "c"y "^", pero no con la secuencia "d"de destino .

En todas las gramáticas de expresiones regulares excepto ECMAScript, si es ] el primer carácter que sigue a la apertura [ o es el primer carácter que sigue a una inicial ^, se representa a sí mismo.

Ejemplos:

  • []a no es válido porque no hay que ] finalizar la expresión de corchetes.

  • []abc] coincide con las secuencias "a"de destino , "b", "c"y "]", pero no con la secuencia "d"de destino .

  • [^]abc] coincide con la secuencia "d"de destino , pero no las secuencias "a"de destino , "b", "c"o "]".

En ECMAScript, use \] para representar el carácter ] en una expresión entre corchetes.

Ejemplos:

  • []a coincide con la secuencia "a" de destino porque la expresión de corchetes está vacía.

  • [\]abc] coincide con las secuencias "a"de destino , "b", "c"y "]" , pero no con la secuencia "d"de destino .

Aserción negativa

Una aserción negativa coincide con cualquier cosa, pero su contenido. No consume ningún carácter en la secuencia de destino.

Por ejemplo, (!aa)(a*) coincide con la secuencia "a" de destino y asocia el grupo de captura 1 con la subsecuencia "a". No coincide con la secuencia "aa" de destino o la secuencia de destino "aaa".

Aserción de límite de palabra negativa

Una aserción de límite de palabra negativa coincide si la posición actual de la cadena de destino no está inmediatamente después de un límite de palabras.

Grupo que no es de captura

Un grupo que no es de captura marca su contenido como una sola unidad en la gramática de expresiones regulares, pero no etiqueta el texto de destino.

Por ejemplo, (a)(?:b)*(c) coincide con el texto "abbc" de destino y asocia el grupo de captura 1 con la subsecuencia "a" y el grupo de captura 2 con la subsecuencia "c".

Repetición no expansiva

Una repetición no expansiva consume la subsecuencia más corta de la secuencia de destino que coincide con el patrón. Una repetición expansiva consume el más largo. Por ejemplo, (a+)(a*b) coincide con la secuencia "aaab"de destino .

Cuando se usa una repetición no expansiva, asocia el grupo de captura 1 con la subsecuencia "a" al principio de la secuencia de destino y el grupo de captura 2 con la subsecuencia "aab" al final de la secuencia de destino.

Cuando se usa una coincidencia expansa, asocia el grupo de captura 1 con la subsecuencia "aaa" y el grupo de captura 2 con la subsecuencia "b".

Secuencia de escape octal

Una secuencia de escape octal es una barra diagonal inversa seguida de uno, dos o tres dígitos octales (0-7). Coincide con un carácter de la secuencia de destino que tiene el valor especificado por esos dígitos. Si todos los dígitos son 0, la secuencia no es válida.

Por ejemplo, \101 coincide con la secuencia "a" de destino cuando se usa la codificación de caracteres ASCII.

Carácter ordinario

Un carácter normal es cualquier carácter válido que no tenga un significado especial en la gramática actual.

En ECMAScript, los caracteres siguientes tienen significados especiales:

  • ^ $ \ . * + ? ( ) [ ] { } |

En basic y grep, los siguientes caracteres tienen significados especiales:

  • . [ \

También en basic y grep, los siguientes caracteres tienen significados especiales cuando se usan en un contexto determinado:

  • * tiene un significado especial en todos los casos, excepto cuando es el primer carácter de una expresión regular o el primer carácter que sigue a una inicial ^ en una expresión regular, o cuando es el primer carácter de un grupo de captura o el primer carácter que sigue a una inicial ^ en un grupo de captura.

  • ^ tiene un significado especial cuando es el primer carácter de una expresión regular.

  • $ tiene un significado especial cuando es el último carácter de una expresión regular.

En extended, egrepy awk, los siguientes caracteres tienen significados especiales:

  • . [ \ ( * + ? { |

Además, en extended, egrepy awk, los caracteres siguientes tienen significados especiales cuando se usan en un contexto determinado.

  • ) tiene un significado especial cuando coincide con un anterior (

  • ^ tiene un significado especial cuando es el primer carácter de una expresión regular.

  • $ tiene un significado especial cuando es el último carácter de una expresión regular.

Un carácter normal coincide con el mismo carácter en la secuencia de destino. De forma predeterminada, esto significa que la coincidencia se realiza correctamente si los dos caracteres están representados por el mismo valor. En una coincidencia que no distingue mayúsculas de minúsculas, dos caracteres ch0 y ch1 coinciden si traits.translate_nocase(ch0) == traits.translate_nocase(ch1). En una coincidencia que distingue la configuración regional, dos caracteres ch0 y ch1 coinciden si traits.translate(ch0) == traits.translate(ch1).

Aserción positiva

Una aserción positiva coincide con su contenido, pero no consume ningún carácter en la secuencia de destino.

Ejemplos:

  • (=aa)(a*) coincide con la secuencia "aaaa" de destino y asocia el grupo de captura 1 con la subsecuencia "aaaa".

  • (aa)(a*) coincide con la secuencia "aaaa" de destino y asocia el grupo de captura 1 con la subsecuencia "aa" al principio de la secuencia de destino y el grupo de captura 2 con la subsecuencia "aa" al final de la secuencia de destino.

  • (=aa)(a)|(a) coincide con la secuencia "a" de destino y asocia el grupo de captura 1 a una secuencia vacía (porque se produjo un error en la aserción positiva) y el grupo de captura 2 con la subsecuencia "a". También coincide con la secuencia "aa" de destino y asocia el grupo de captura 1 con la subsecuencia "aa" y el grupo de captura 2 con una secuencia vacía.

Secuencia de escape Unicode

Una secuencia de escape unicode es una barra diagonal inversa seguida de la letra 'u' seguida de cuatro dígitos hexadecimales (0-9a-fA-F). Coincide con un carácter de la secuencia de destino que tiene el valor especificado por los cuatro dígitos. Por ejemplo, \u0041 coincide con la secuencia "a" de destino cuando se usa la codificación de caracteres ASCII.

Carácter comodín

Un carácter comodín coincide con cualquier carácter de la expresión de destino excepto una nueva línea.

límite de Word

Se produce un límite de palabras en las situaciones siguientes:

  • El carácter actual está al principio de la secuencia de destino y es uno de los caracteres de la palabra A-Za-z0-9_

  • La posición del carácter actual está más allá del final de la secuencia de destino y el último carácter de la secuencia de destino es uno de los caracteres de palabra.

  • El carácter actual es uno de los caracteres de palabra y el carácter anterior no lo es.

  • El carácter actual no es uno de los caracteres de palabra y el carácter anterior.

Aserción de límites de Word

Una aserción de límite de palabra coincide cuando la posición actual de la cadena de destino es inmediatamente después de un límite de palabra.

Búsqueda y coincidencia

Para que una expresión regular coincida con una secuencia de destino, toda la expresión regular debe coincidir con toda la secuencia de destino. Por ejemplo, la expresión bcd regular coincide con la secuencia "bcd" de destino, pero no coincide con la secuencia "abcd" de destino ni la secuencia "bcde"de destino .

Para que una búsqueda de expresiones regulares se realice correctamente, debe haber una subsecuencia en algún lugar de la secuencia de destino que coincida con la expresión regular. La búsqueda suele encontrar la subsecuencia coincidente más a la izquierda.

Ejemplos:

  • Una búsqueda de la expresión bcd regular en la secuencia "bcd" de destino se realiza correctamente y coincide con toda la secuencia. La misma búsqueda de la secuencia "abcd" de destino también se realiza correctamente y coincide con los tres últimos caracteres. La misma búsqueda de la secuencia "bcde" de destino también se realiza correctamente y coincide con los tres primeros caracteres.

  • Una búsqueda de la expresión bcd regular en la secuencia "bcdbcd" de destino se realiza correctamente y coincide con los tres primeros caracteres.

Si hay más de una subsecuencia que coincide en alguna ubicación de la secuencia de destino, hay dos maneras de elegir el patrón coincidente.

La primera coincidencia elige la subsecuencia que se encontró primero cuando se coincide con la expresión regular.

La coincidencia más larga elige la subsecuencia más larga de las que coinciden en esa ubicación. Si hay más de una subsecuencia que tiene la longitud máxima, la coincidencia más larga elige la que se encontró primero.

Por ejemplo, cuando se usa la primera coincidencia, una búsqueda de la expresión b|bc regular en la secuencia "abcd" de destino coincide con la subsecuencia "b" porque el término izquierdo de la alternancia coincide con esa subsecuencia; por lo tanto, la primera coincidencia no prueba el término derecho de la alternancia. Cuando se usa la coincidencia más larga, la misma búsqueda coincide "bc" porque "bc" es mayor que "b".

Una coincidencia parcial se realiza correctamente si la coincidencia alcanza el final de la secuencia de destino sin errores, aunque no haya alcanzado el final de la expresión regular. Por lo tanto, después de que una coincidencia parcial se realice correctamente, anexar caracteres a la secuencia de destino podría provocar un error en una coincidencia parcial posterior. Sin embargo, después de que se produzca un error en una coincidencia parcial, anexar caracteres a la secuencia de destino no puede provocar que una coincidencia parcial posterior se realice correctamente. Por ejemplo, con una coincidencia parcial, coincide con la secuencia "a" de destino, ab pero no "ac".

Marcas de formato

ECMAScript Reglas de formato reglas de formato sed Texto de reemplazo
$& & Secuencia de caracteres que coincide con toda la expresión regular: [match[0].first, match[0].second)
$$ $
\& &
$`" (signo de dólar seguido de la cotización inversa) Secuencia de caracteres que precede a la subsecuencia que coincide con la expresión regular: [match.prefix().first, match.prefix().second)
$'" (signo de dólar seguido de cotización a reenviada) Secuencia de caracteres que sigue a la subsecuencia que coincide con la expresión regular: [match.suffix().first, match.suffix().second)
$n \n Secuencia de caracteres que coincide con el grupo de captura en la posición n, donde n es un número entre 0 y 9: [match[n].first, match[n].second)
\\n \n
$nn Secuencia de caracteres que coincide con el grupo de captura en la posición nn, donde nn es un número comprendido entre 10 y 99: [match[nn].first, match[nn].second)

Consulte también

Información general sobre la biblioteca estándar de C++