Expresiones regulares (C++)
La biblioteca estándar de C++ admite varias gramáticas de expresiones regulares. En este tema se de abordan 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 valores de std::regex_constants::syntax_option_type 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 usan JavaScript y los lenguajes .NET.
- basic: expresiones regulares POSIX basic o BRE.
- extended: expresiones regulares POSIX extended o ERE.
- awk: es , pero tiene más escapes para extended los caracteres que no se imprimen.
- grep: es , pero también permite que los caracteres de nueva basic línea (
\n) separe las alternancias. - e grep : es , pero también permite que los caracteres de nueva línea extended separe las 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: se omite el uso de mayúsculas y minúsculas al coincidir.nosubs: omitir coincidencias marcadas (es decir, expresiones entre paréntesis); no se almacenan sustituciones.optimize: haga 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 con el formato[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 asume como gramática.
Elemento
Un elemento puede ser uno de los siguientes:
Un carácter ordinario 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 entre corchetes del formulario , que coincide con un carácter o un elemento de intercalación de la secuencia de destino que también está en el conjunto definido por la expresión , o del formato , que coincide con un carácter o un elemento de intercalación de la secuencia de destino que no está en el conjunto definido por la expresión
expr[^expr]expr.La expresión
exprpuede contener cualquier combinación de lo siguiente:Un carácter individual. Agrega el carácter al conjunto definido por
expr.Intervalo de caracteres con el formato . Agrega los caracteres representados por valores del intervalo cerrado
[ch1, ch2]al conjunto definido porexpr.Clase de caracteres con el formato . Agrega los caracteres de la clase con nombre al conjunto definido por
expr.Clase de equivalencia del formulario . Agrega los elementos de intercalación que son equivalentes a
eltal conjunto definido porexpr.Símbolo de intercalación del formulario . Agrega el elemento de intercalación
eltal conjunto definido porexpr.
Un delimitador. El
^delimitador coincide con el principio de la secuencia de destino. El$delimitador coincide con el final de la secuencia de destino.
Grupo de capturas con el formato (subexpresión), o \(subexpresión\) en y , 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 con el formato , que coincide con el carácter de la secuencia de
kdestino.
Ejemplos:
acoincide con la secuencia de"a"destino, pero no coincide con las secuencias de"B"destino , o"b""c"..coincide con todas las secuencias"a"de"B"destino, ,"b"y"c".[b-z]coincide con las secuencias de destino y , pero no"b""c"coincide con las secuencias de destino"a"o"B".[:lower:]coincide con las secuencias"a"de destino , y , pero no coincide con la secuencia de destino"b""c""B".(a)coincide con la secuencia de destino y asocia el grupo de captura 1 con la subsecuencia , pero no coincide con las secuencias de destino"a""a", o"B""b""c".
En , y , un elemento también puede ser una referencia posterior del formato , donde 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 ECMAScriptbasicgrepECMAScript\dddd N. basic
Por ejemplo, coincide con la secuencia de destino porque el primer grupo de captura (y solo) coincide con la secuencia inicial y, a continuación, coincide (a)\1 con la secuencia final "aa""a"\1"a" .
En ECMAScript , un elemento también puede ser uno de los siguientes:
Un grupo que no es de captura con el formato (?: 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 con el formato , , , o
\n\r\t\v. Estos coinciden con un avance de página, una nueva línea, un retorno de carro, una tabulación horizontal y una tabulación vertical, respectivamente, en la secuencia de destino.Aserción positiva del formato (= 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.
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 cambie la posición de coincidencia en la secuencia de destino.
Secuencia de escape hexadecimal con el formato . Coincide con un carácter en la secuencia de destino representado por los dos dígitos hexadecimales
hh.Secuencia de escape Unicode con el formato . Coincide con un carácter de la secuencia de destino representado por los cuatro dígitos hexadecimales
hhhh.Secuencia de escape de control con el formato . Coincide con el carácter de control que denomina el carácter
k.Aserción de límite de palabras con el formato . Coincide cuando la posición actual en la secuencia de destino está inmediatamente después de un límite de palabra.
Aserción de límite de palabra negativa con el formato . Coincide con cuando la posición actual de la secuencia de destino no está inmediatamente después de un límite de palabras.
Escape de caracteres dsw con el formato , , , , ,
\D\s\S\w\W. Proporciona un nombre corto para una clase de carácter.
Ejemplos:
(?:a)coincide con la secuencia de"a"destino,"(?:a)\1"pero no es válida porque no hay ningún grupo de captura 1.(=a)acoincide con la secuencia de destino"a". La aserción positiva coincide con la secuencia inicial de la secuencia de destino y la final de la expresión regular coincide con la"a"secuencia inicial de la secuencia de"a""a"destino.(!a)ano coincide con la secuencia de destino"a".a\b.coincide con la secuencia de"a~"destino , pero no coincide con la secuencia de destino"ab".a\B.coincide con la secuencia de"ab"destino , pero no coincide con la secuencia de destino"a~".
En awk , un elemento también puede ser uno de los siguientes:
Escape de formato de archivo con el formato , , , , , , o
\a\b\f\n\r\t\v. Estos coinciden con una barra diagonal inversa, una alerta, un retroceso, un avance de página, una nueva línea, un retorno de carro, una tabulación horizontal y una tabulación vertical, respectivamente, en la secuencia de destino.Secuencia de escape octal con el formato . Coincide con un carácter en la secuencia de destino cuya representación es el valor representado por uno, dos o tres de los dígitos octales
ooo.
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 repetición. El tipo más general de recuento de repeticiones toma la forma {min,max}, o \{min,max\} en y . Un elemento seguido de esta forma de recuento de repeticiones coincide con al menos un número mínimo de repeticiones sucesivas y no más del número máximo de repeticiones sucesivas de una secuencia que coincide con el elemento .
Por ejemplo, coincide con la secuencia de destino y la secuencia de destino , pero no con la secuencia de a{2,3} destino ni con la secuencia de "aa""aaa""a""aaaa" destino.
Un recuento de repetición también puede adoptar una de las siguientes formas:
{min} o \{min} en y . Equivalente a {min,min}.
{min,} o \{min,\} en y . Equivalente a {min,unbounded}.
*es equivalente a {0,*}.
Ejemplos:
a{2}coincide con la secuencia de"aa"destino, pero no con la secuencia de"a"destino ni con la secuencia de"aaa"destino.a{2,}coincide con la secuencia de destino , la secuencia de destino, y así"aa""aaa"sucesivamente, pero no coincide con la secuencia de destino"a".a*coincide con la secuencia de""destino , la secuencia de"a"destino, la secuencia de"aa"destino, y así sucesivamente.
En todas las gramáticas excepto basic y grep, un recuento de repetición también puede adoptar una de las siguientes formas:
?equivale a {0,1}.+es equivalente a {1,+}.
Ejemplos:
a?coincide con la secuencia de""destino y la secuencia de"a"destino, pero no con la secuencia de"aa"destino.a+coincide con la secuencia de"a"destino , la secuencia de"aa"destino, y así sucesivamente, pero no con la secuencia de""destino.
En , todas las formas de recuento de repeticiones pueden ir seguidas del carácter que designa una repetición ECMAScript? no ECMAScript
Concatenación
Los elementos de expresión regular, con o sin recuentos de repetición, 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, coincide con la secuencia de destino y la secuencia de destino, pero no coincide con la secuencia de a{2,3}b destino ni con la secuencia de "aab""aaab""ab""aaaab" destino.
Alternancia
En todas las gramáticas de expresiones regulares excepto y , una expresión regular concatenada puede ir seguida del carácter basic (canalización) y otra expresión regular grep| concatenada. Cualquier cantidad de expresiones regulares concatenadas se pueden combinar de esta manera. La expresión resultante coincide con cualquier secuencia de destino que coincida con una o más de las expresiones regulares concatenadas.
Cuando más de una de las expresiones regulares concatenadas coincide con la secuencia de destino, elige la primera de las expresiones regulares concatenadas que coincide con la secuencia como coincidencia, a la que se hará referencia como la primera ECMAScriptECMAScript Las demás gramáticas de expresiones regulares eligen la que logra la coincidencia más larga.
Por ejemplo, coincide con la secuencia de destino y la secuencia de destino, pero no coincide con la secuencia de ab|cd destino ni con la secuencia de "ab""cd""abd""acd" destino.
En y e , se puede usar un carácter de nueva grep línea ( ) para separar grep\n alternancias.
Subexpression
En basic y grep, una subexpresión es una concatenación. En el resto de las gramáticas de expresiones regulares, una subexpresión es una alternancia.
Resumen de gramática
En la siguiente tabla se resumen las características que están disponibles en las diferentes gramáticas de expresiones regulares:
| Elemento | basic | extended | ECMAScript | grep | egrep | awk |
|---|---|---|---|---|---|---|
alternancia mediante | |
+ | + | + | + | ||
alternancia mediante \n |
+ | + | ||||
| delimitador | + | + | + | + | + | + |
| referencia inversa | + | + | + | |||
| expresión entre corchetes | + | + | + | + | + | + |
grupo de captura mediante () |
+ | + | + | + | ||
grupo de captura mediante \(\) |
+ | + | ||||
| secuencia de escape de control | + | |||||
| carácter de escape dsw | + | |||||
| escape de formato de archivo | + | + | ||||
| secuencia de escape hexadecimal | + | |||||
| escape de identidad | + | + | + | + | + | + |
| aserción negativa | + | |||||
| aserción de límite de palabra negativa | + | |||||
| grupo de no-captura | + | |||||
| repetición no expansiva | + | |||||
| secuencia de escape octal | + | |||||
| caracteres ordinarios | + | + | + | + | + | + |
| 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 palabra | + |
Detalles semánticos
Delimitador
Un delimitador coincide con una posición de la cadena de destino, no con un carácter. Un ^ objeto coincide con el principio de la cadena de destino y un objeto coincide con el final de $ la cadena de destino.
Referencia atrás
Una referencia inversa es una barra diagonal inversa seguida de un valor decimal N. Coincide con el contenido del eNésimo grupo de capturas. 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 lo determina 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 a la barra diagonal inversa. Por consiguiente, en basic y grep, el valor de N nunca es mayor que 9, aunque la expresión regular tenga más de nueve grupos de captura. En ECMAScript, el valor de N es unbounded.
Ejemplos:
((a+)(b+))(c+)\3coincide con la secuencia de destino"aabbbcbbb". La referencia de\3reserva coincide con el texto del tercer grupo de captura, es decir,"(b+)". No coincide con la secuencia de"aabbbcbb"destino.(a)\2no es válido.(b(((((((((a))))))))))\10tiene significados diferentes en basic y en ECMAScript . En basic , la referencia posterior es\1. La referencia de reserva coincide con el contenido del primer grupo de captura (es decir, el que comienza con y termina con el final y viene antes de la referencia posterior), y el final coincide con el carácter(b)normal00. En ECMAScript , la referencia posterior es\10. Coincide con el décimo grupo de captura, es decir, el más profundo.
Expresión de corchetes
Una expresión entre corchetes define un conjunto de caracteres y los 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. Si no, se produce la coincidencia si alguno de los elementos del conjunto coincide con el carácter actual en la secuencia de destino.
El conjunto de caracteres puede definirse enumerando cualquier combinación de caracteres individuales, intervalos de caracteres, clases de caracteres, clases de equivalencia y símbolos de 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 captura es un número, que se determina contando los paréntesis de apertura que marcan los grupos de captura 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 de"abb"destino , pero no coincide con la secuencia de destino"abab".(ab)+no coincide con la secuencia de destino"abb", pero coincide con la secuencia de destino"abab".((a+)(b+))(c+)coincide con la secuencia de destino y asocia el grupo de captura 1 con la subsecuencia , el grupo de captura 2 con la subsecuencia , el grupo de captura 3 con y el grupo de captura 4 con la"aabbbc""aabbb""aa""bbb"subsecuencia"c".
Clase de carácter
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 entre 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 una clase de esas si traits.isctype(ch, id) devuelve true. La plantilla regex_traits predeterminada admite los nombres de clase incluidos en la tabla siguiente.
| Class Name (Nombre de clase) | Descripción |
|---|---|
alnum |
letras minúsculas, mayúsculas y dígitos |
alpha |
letras minúsculas y mayúsculas |
blank |
espacio o tabulación |
cntrl |
los caracteres de escape de formato de archivo |
digit |
dígitos |
graph |
letras minúsculas, mayúsculas, dígitos y signos de puntuación |
lower |
letras minúsculas |
print |
letras minúsculas, mayúsculas, dígitos, signos de puntuación y espacios |
punct |
puntuación |
space |
espacio |
upper |
caracteres en mayúsculas |
xdigit |
digits, a , , , , , , , , b , , cdefABCDE , F |
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 entre corchetes. Para crear un intervalo de caracteres, coloque el carácter '-' entre el primer y el último carácter del intervalo. Un intervalo de caracteres coloca en el conjunto 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. Observe que este conjunto de caracteres agregados depende de la representación de caracteres específica de la plataforma. Si el carácter aparece al principio o al final de una expresión entre corchetes, o como el primer o último carácter de un intervalo de caracteres, se representa a '-' sí mismo.
Ejemplos:
[0-7]representa el conjunto de caracteres {0, , , , , , ,1234567}. Coincide con las secuencias de"0"destino , , , y así"1"sucesivamente, pero no"a"con .En sistemas que usan codificación de caracteres ASCII,
[h-k]representa el conjunto de caracteres { , , ,hijk}. Coincide con las secuencias de"h"destino , , , y así"i"sucesivamente, pero no"\x8A"con o"0".En los sistemas que usan codificación de caracteres EBCDIC, representa el conjunto de caracteres
[h-k]{ , , , , , , , , } ( se codifica como y se codificahi'\x8A''\x8B'como'\x8C''\x8D''\x8E''\x8F''\x90'jkh0x88k0x92). Coincide con las secuencias de"h"destino , , , , y así"i""\x8A"sucesivamente, pero no"0"con .[-0-24]representa el conjunto de caracteres {-, , , ,0124}.[0-2-]representa el conjunto de caracteres {0,1, ,2-}.En sistemas que usan codificación de caracteres ASCII,
[+--]representa el conjunto de caracteres {+,-}.
Sin embargo, cuando se utilizan intervalos que distinguen la configuración regional, los caracteres de un intervalo están determinados por las reglas de intercalación de la configuración regional. Los caracteres que se intercalan después del primer carácter y antes del último carácter de la definición del intervalo están 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 interpreta como un único 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 entre 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 seguida de una de 'c' las letras a través de o a través de 'a''z''A''Z' . Coincide con el carácter de control ASCII al que da nombre esa letra. Por ejemplo, "\ci" coincide con la secuencia de destino , porque "\x09" Ctrl+I tiene el valor 0x09 .
Escape de caracteres DSW
Un escape de carácter 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
Clase de equivalencia
Una clase de equivalencia en una expresión entre corchetes agrega todos los caracteres y los elementos de intercalación que son equivalentes al elemento de intercalación de la definición de clase de equivalencia al conjunto definido por la expresión entre corchetes.
Para crear una clase de equivalencia, use [= seguido de un elemento de intercalación seguido de =] . Internamente, dos elementos de intercalación elt1 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 habituales de caracteres de lenguaje C, \\ , , , , , , \a\b\f\n\r\t\v . Estos tienen los significados habituales, es decir, barra diagonal inversa, alerta, retroceso, avance de formulario, nueva línea, retorno de carro, pestaña horizontal y pestaña vertical, respectivamente. En ECMAScript , y no se \a\b 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 de destino cuando se usa la "a" codificación de caracteres ASCII.
Escape de identidad
Un escape de identidad es una barra diagonal inversa seguida de un único 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 de"aaa"destino , pero no coincide con la secuencia de destino"a*".a\*no coincide con la secuencia de destino"aaa", pero coincide con la secuencia de destino"a*".
El conjunto de caracteres que se permite 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 los que pueden formar parte de un identificador. Normalmente, esto incluye letras, dígitos, $_ , y secuencias de escape Unicode. Para obtener más información, vea ECMAScript Language Specification. |
Carácter individual
Un carácter individual en una expresión entre corchetes agrega ese carácter al conjunto de caracteres definido por la expresión entre corchetes. En cualquier lugar de una expresión entre corchetes, excepto al principio, se ^ representa a sí mismo.
Ejemplos:
[abc]coincide con las secuencias"a"de destino , y , pero no con la secuencia"b""c""d".[^abc]coincide con la secuencia de"d"destino , pero no con las secuencias de destino , o"a""b""c".[a^bc]coincide con las secuencias"a"de destino , , y , pero no con la secuencia de destino"b""c""^""d".
En todas las gramáticas de expresiones regulares excepto , si es el primer carácter que sigue a la apertura o es el primer carácter que sigue a un ECMAScript][^ inicial, se representa a sí mismo.
Ejemplos:
[]ano es válido porque no hay ningún elemento]para finalizar la expresión entre corchetes.[]abc]coincide con las secuencias"a"de destino , , y , pero no con la secuencia de destino"b""c""]""d".[^]abc]coincide con la secuencia de destino , pero no con las"d"secuencias de"a"destino , , o"b""c""]".
En ECMAScript , use para representar el carácter en una expresión entre \]] corchetes.
Ejemplos:
[]acoincide con la secuencia de"a"destino porque la expresión entre corchetes está vacía.[\]abc]coincide con las secuencias"a"de destino , , y , pero no con la secuencia de destino"b""c""]""d".
Aserción negativa
Una aserción negativa coincide con todo menos con su contenido. No consume ningún carácter en la secuencia de destino.
Por ejemplo, (!aa)(a*) coincide con la secuencia de destino y asocia el grupo de captura "a" 1 con la subsecuencia "a" . No coincide con la secuencia de destino "aa" ni con la secuencia de "aaa" destino.
Aserción de límite de palabras negativas
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 palabra.
Grupo que no es de captura
Un grupo sin captura marca su contenido como una sola unidad en la gramática de expresiones regulares, pero no etiqueta el texto de destino.
Por ejemplo, coincide con el texto de destino y asocia el grupo de captura 1 con la subsecuencia y el grupo de captura (a)(?:b)*(c)"abbc""a" 2 con la subsecuencia "c" .
Repetición no expansión
Una repetición no expansiva usa la subsecuencia más corta de la secuencia de destino que coincida con el patrón. Una repetición expansiva usa la más larga. Por ejemplo, coincide (a+)(a*b) con la secuencia de destino "aaab" .
Cuando se usa una repetición no expansión, asocia el grupo de captura 1 con la subsecuencia al principio de la secuencia de destino y el grupo de captura 2 con la subsecuencia al final de la secuencia de "a""aab" destino.
Cuando se usa una coincidencia expansión, asocia el grupo de captura 1 con la subsecuencia y el grupo de captura 2 con la "aaa" 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 de destino cuando se usa la "a" codificación de caracteres ASCII.
Carácter normal
Un carácter normal es cualquier carácter válido que no tiene un significado especial en la gramática actual.
En ECMAScript, los caracteres siguientes tienen significados especiales:
^$\.*+?()[]{}|
En basic y grep, los caracteres siguientes tienen significados especiales:
.[\
Además, basic en y , los caracteres siguientes tienen significados especiales cuando se usan en un contexto grep 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 capturas o el primer carácter que sigue a una inicial en un grupo^^de capturas.^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 , e y , los caracteres siguientes tienen grepawk significados especiales:
.[\(*+?{|
Además, en , e y , los caracteres siguientes tienen significados especiales cuando extended se usan en un contexto grepawk 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 ordinario coincide con el mismo carácter en la secuencia de destino. De forma predeterminada, esto significa que se produce la coincidencia si los dos caracteres se representan mediante el mismo valor. En una coincidencia sin distinción entre mayúsculas y 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 de"aaaa"destino y asocia el grupo de captura 1 con la subsecuencia"aaaa".(aa)(a*)coincide con la secuencia de destino y asocia el grupo de captura 1 con la subsecuencia al principio de la secuencia de destino y el grupo de captura 2 con la"aaaa"subsecuencia al final de la secuencia"aa""aa"de destino.(=aa)(a)|(a)coincide con la secuencia de destino y asocia el grupo de captura 1 a una secuencia vacía (porque se ha dado error en la aserción positiva) y el grupo de captura 2 con la"a"subsecuencia"a". También coincide con la secuencia de destino y asocia el grupo de captura 1 con la subsecuencia y el grupo de captura"aa""aa"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 de destino cuando se usa la "a" 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 con una nueva línea.
Límite de palabras
Un límite de palabra aparece en las situaciones siguientes:
El carácter actual está al principio de la secuencia de destino y es uno de los caracteres alfabéticos
A-Za-z0-9_La posición del carácter actual se pasa al final de la secuencia de destino y el último carácter de la secuencia de destino es uno de los caracteres alfabéticos.
El carácter actual es uno de los caracteres de palabra y el carácter anterior no.
El carácter actual no es uno de los caracteres de palabra y el carácter anterior es .
Aserción de límite de palabras
Una aserción de límite de palabra coincide cuando la posición actual en la cadena de destino está inmediatamente después de un límite de palabra.
Búsqueda y búsqueda de coincidencias
Para que una expresión regular coincida con una secuencia de destino, la expresión regular completa debe coincidir con la secuencia de destino completa. Por ejemplo, la expresión regular coincide con la secuencia de destino, pero no coincide con la secuencia de bcd destino ni con la secuencia de "bcd""abcd""bcde" destino.
Para que una búsqueda de expresiones regulares dé resultado, debe haber una subsecuencia en alguna parte de la secuencia de destino que coincida con la expresión regular. La búsqueda encuentra, normalmente, la subsecuencia coincidente situada más a la izquierda.
Ejemplos:
Una búsqueda de la expresión regular
bcden la secuencia de destino se realiza"bcd"correctamente y coincide con toda la secuencia. La misma búsqueda de la secuencia de destino"abcd"también se realiza correctamente y coincide con los tres últimos caracteres. La misma búsqueda de la secuencia de destino"bcde"también se realiza correctamente y coincide con los tres primeros caracteres.Una búsqueda de la expresión regular
bcden la secuencia de destino se realiza"bcdbcd"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 de coincidencia.
La primera coincidencia elige la subsecuencia que se encuentra primero cuando coincide la expresión regular.
La coincidencia más larga elige la subsecuencia más larga entre 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 regular en la secuencia de destino coincide con la subsecuencia porque el término izquierdo de la alternancia coincide con esa b|bc"abcd" subsecuencia; por lo tanto, la primera coincidencia no prueba el término derecho de la "b" alternancia. Cuando se usa la coincidencia más larga, la misma búsqueda coincide "bc" porque es mayor que "bc""b" .
Una coincidencia parcial se realiza correctamente si la coincidencia alcanza el final de la secuencia de destino sin errores, incluso si no ha llegado al final de la expresión regular. Por consiguiente, después de que una coincidencia parcial dé resultado, anexar los caracteres a la secuencia de destino puede causar que una coincidencia parcial posterior dé error. Sin embargo, después de que se produce un error en una coincidencia parcial, anexar caracteres a la secuencia de destino no puede hacer que una coincidencia parcial posterior se haga correctamente. Por ejemplo, con una coincidencia parcial, coincide ab con la secuencia de "a" destino, pero no con "ac" .
Marcas de formato
| ECMAScript Reglas de formato | Reglas de formato usadas | Texto de sustitución |
|---|---|---|
$& |
& |
Secuencia de caracteres que coincide con toda la expresión regular: [match[0].first, match[0].second) |
$$ |
$ |
|
\& |
& |
|
$`" (signo de dólar seguido de comillas atrás) |
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 comillas al día) |
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 capturas en la posición n , donde es un número entre n 0 y 9: [match[n].first, match[n].second) |
\\n |
\n |
|
$nn |
Secuencia de caracteres que coincide con el grupo de capturas en la posición , donde nn es un número entre nn 10 y 99: [match[nn].first, match[nn].second) |