Sintaxis de Expresiones regulares 2 (re2.h)
Las expresiones regulares son una notación para describir conjuntos de cadenas de caracteres. Cuando una cadena está en el conjunto descrito por una expresión regular, decimos que la expresión regular coincide con la cadena.
La expresión regular más simple es un carácter literal único. A excepción de los metacaracteres como *+?()|
, los caracteres coinciden con sí mismos. Para que coincida con un metacaracter, escape con una barra diagonal inversa. Por ejemplo, \+
coincide con el literal más el carácter.
Se pueden modificar o concatenar dos expresiones regulares para formar una nueva expresión regular: si e1 coincide con s y e2 coincide con t, e1 | e2 coincide con s o t y e1e2 coincide con st.
Los metacaracteres *
, +
y ?
son operadores de repetición: e1*
coincide con una secuencia de cero o más cadenas (posiblemente diferentes), cada una de las cuales coincide con e1; e1+
coincide con uno o más; e1?
coincide con cero o uno.
La precedencia del operador, de enlace más débil a más fuerte, es la siguiente:
- alternancia
- concatenación
- operadores de repetición
Los paréntesis explícitos se pueden usar para forzar significados diferentes, como en expresiones aritméticas. Algunos ejemplos: ab|cd
es equivalente a (ab)|(cd)
; ab\
es equivalente a a(b\)
.
De la sintaxis descrita hasta ahora, la mayoría es de la sintaxis de las expresiones regulares egrep de Unix. Este subconjunto es suficiente para describir todos los idiomas normales. Un lenguaje normal es un conjunto de cadenas que pueden coincidir en un solo paso a través del texto usando solo una cantidad fija de memoria. Las instalaciones de expresiones regulares más recientes (en particular Perl y los lenguajes que la han copiado) han agregado muchos operadores nuevos y secuencias de escape. Estos cambios hacen que las expresiones regulares sean más concisas y, a veces, más crípticas, pero no más eficaces.
En esta página, se muestra la sintaxis de las expresiones regulares aceptada por RE2.
También enumera algunas sintaxis aceptadas por PCRE, PERL y VIM.
Tipos de expresiones de carácter único | Ejemplos |
---|---|
cualquier carácter, posiblemente que incluya nueva línea (s=true) | . |
clase de carácter | [xyz] |
clase de carácter negado | [^xyz] |
clase de carácter de Perl (vínculo) | \d |
clase de carácter de Perl negado | \D |
clase de carácter de ASCII(vínculo) | [[:alpha:]] |
clase de carácter de ASCIl negado | [[:^alpha:]] |
clase de carácter de Unicode (nombre de una letra) | \pN |
clase de carácter de Unicode | \p{Greek} |
clase de carácter de Unicode negado (nombre de una letra) | \PN |
clase de carácter de Unicode negado | \P{Greek} |
Composiciones | |
---|---|
xy | x seguido de y |
x|y | x o y (prefiere x) |
Repeticiones | |
---|---|
x* | cero o más x, prefiere más |
x+ | una o más x, prefiere más |
x? | cero o una x, prefiere una |
x{n,m} | n o n+1 o ... m x, prefiere más |
x{n,} | n o más x, prefiere más |
x{n} | exactamente n x |
x*? | cero o más x, prefiere menos |
x+? | una o más x, prefiere menos |
x?? | cero o una x, prefiere cero |
x{n,m}? | n o n+1 o ... m x, prefiere menos |
x{n,}? | n o más x, prefiere menos |
x{n}? | exactamente n x |
x{} | (≡ x*) (NO COMPATIBLE) VIM |
x{-} | (≡ x*?) (NO COMPATIBLE) VIM |
x{-n} | (≡ x{n}?) (NO COMPATIBLE) VIM |
x= | (≡ x?) (NO COMPATIBLE) VIM |
Restricción de implementación: los formularios x{n,m}
de recuento , x{n,}
y x{n}
rechazan formularios que crean un recuento de repeticiones mínimo o máximo superior a 1000. Las repeticiones ilimitadas no están sujetas a esta restricción.
Repeticiones posesivas | |
---|---|
x*+ | cero o más x, posesiva (NO COMPATIBLE) |
x++ | una o más x, posesiva (NO COMPATIBLE) |
x?+ | cero o una x, posesiva (NO COMPATIBLE) |
x{n,m}+ | n o ... o m x, posesiva (NO COMPATIBLE) |
x{n,}+ | n o más x, posesiva (NO COMPATIBLE) |
x{n}+ | exactamente n x, posesiva (NO COMPATIBLE) |
Agrupación | |
---|---|
(re) | grupo de captura numerado (subcoincidencia) |
(?P<nombre>re) | denominado & grupo de captura numerado (submatch) |
(?<nombre>re) | denominado & grupo de captura numerado (submatch) (NOT SUPPORTED) |
(?' name're) | denominado & grupo de captura numerado (submatch) (NOT SUPPORTED) |
(?:re) | grupo de no captura |
(?flags) | establecer flags en el grupo actual; de no captura |
(?flags:re) | establecer flags durante re; de no captura |
(?#text) | comentario (NO COMPATIBLE) |
(?|x|y|z) | restablecimiento de numeración de bifurcación (NO COMPATIBLE) |
(?>re) | coincidencia posesiva de re (NO COMPATIBLE) |
re@> | coincidencia posesiva de re (NO COMPATIBLE) VIM |
%(re) | grupo de no captura (NO COMPATIBLE) VIM |
Flags | |
---|---|
i | no distingue mayúsculas de minúsculas (predeterminado false) |
m | modo de varias líneas: ^ y $ coinciden en línea inicial/final, además del texto inicial/final (predeterminado false) |
s | dejar . coincidir \n (predeterminado false) |
U | ungreedy: swap meaning of x* and x*?, x+ and x+?, etc (default false) |
La sintaxis de marca es xyz
(set) o -xyz
(clear) o xy-z
(set xy
, clear z
).
Cadenas vacías | |
---|---|
^ | al comienzo del texto o la línea (m=true) |
$ | al final del texto (como \z, no \Z) o línea (m=true) |
\A | al comienzo del texto |
\b | en un límite de palabras ASCII (\w en un lado y \W, \A o \z en el otro) |
\B | no en el límite de palabras ASCII |
\g | al comienzo del subtexto que se busca (NO COMPATIBLE) PCRE |
\G | al final de la última coincidencia (NO COMPATIBLE) PERL |
\Z | al final del texto o antes de la línea nueva al final del texto (NO COMPATIBLE) |
\z | al final del texto |
(?=re) | antes del texto que coincide con re (NO COMPATIBLE) |
(?!re) | antes del texto que no coincide con re (NO COMPATIBLE) |
(?<=re) | después del texto que coincide con re (NO COMPATIBLE) |
(?<!re) | después del texto que no coincide con re (NO COMPATIBLE) |
re& | antes del texto que coincide con re (NO COMPATIBLE) VIM |
re@= | antes del texto que coincide con re (NO COMPATIBLE) VIM |
re@! | antes del texto que no coincide con re (NO COMPATIBLE) VIM |
<re@= | después del texto que coincide con re (NO COMPATIBLE) VIM |
re@<! | después del texto que no coincide con re (NO COMPATIBLE) VIM |
\zs | configura el inicio de la coincidencia (= \K) (NO COMPATIBLE) VIM |
\ze | configura el final de la coincidencia (NO COMPATIBLE) VIM |
\%^ | comienzo del archivo (NO COMPATIBLE) VIM |
\%$ | final del archivo (NO COMPATIBLE) VIM |
\%V | en pantalla (NO COMPATIBLE) VIM |
\%# | posición del cursor (NO COMPATIBLE) VIM |
\%'m | marcar posición m (NO COMPATIBLE) VIM |
\%23l | en línea 23 (NO COMPATIBLE) VIM |
\%23c | en columna 23 (NO COMPATIBLE) VIM |
\%23v | en columna virtual 23 (NO COMPATIBLE) VIM |
Secuencias de escape | |
---|---|
\a | campana (≡ \007) |
\f | fuente de formulario (≡ \014) |
\t | pestaña horizontal (≡ \011) |
\n | nueva línea (≡ \012) |
\r | retorno de carro (≡ \015) |
\v | carácter de pestaña vertical (≡ \013) |
* | literal *, para cualquier carácter de puntuación * |
\123 | código de carácter octal (hasta tres dígitos) |
\x7F | código de carácter hexadecimal (exactamente dos dígitos) |
\x{10FFFF} | código de carácter hexadecimal |
\C | coincidir un único byte en modo UTF-8 |
\Q...\E | texto literal... incluso si ... tiene signos de puntuación |
\1 | referencia inversa (NO COMPATIBLE) |
\b | retroceso (NO COMPATIBLE) (uso \010) |
\cK | carácter de control ^ K (NO COMPATIBLE) (uso \001, etc.) |
\e | escape (NO COMPATIBLE) (uso \033) |
\g1 | referencia inversa (NO COMPATIBLE) |
\g{1} | referencia inversa (NO COMPATIBLE) |
\g{+1} | referencia inversa (NO COMPATIBLE) |
\g{-1} | referencia inversa (NO COMPATIBLE) |
\g{nombre} | referencia inversa con nombre (NO COMPATIBLE) |
\g<nombre> | llamada de subrutina (NO COMPATIBLE) |
\g'name' | llamada de subrutina (NO COMPATIBLE) |
\k<nombre> | referencia inversa con nombre (NO COMPATIBLE) |
\k'name' | referencia inversa con nombre (NO COMPATIBLE) |
\lX | X minúscula (NO COMPATIBLE) |
\ux | x mayúscula (NO COMPATIBLE) |
\L...\E | texto en minúsculas ... (NO COMPATIBLE) |
\K | restablecer inicio de $0 (NO COMPATIBLE) |
\N{nombre} | carácter Unicode con nombre (NO COMPATIBLE) |
\R | salto de línea (NO COMPATIBLE) |
\U...\E | texto en mayúsculas ... (NO COMPATIBLE) |
\X | secuencia Unicode extendida (NO COMPATIBLE) |
%d123 | carácter decimal 123 (NO COMPATIBLE) VIM |
%xFF | carácter hexadecimal FF (NO COMPATIBLE) VIM |
%o123 | carácter octal 123 (NO COMPATIBLE) VIM |
%u1234 | carácter Unicode 0x1234 (NO COMPATIBLE) VIM |
%U12345678 | carácter Unicode 0x12345678 (NO COMPATIBLE) VIM |
Elementos de clases de carácter | |
---|---|
x | carácter único |
A-Z | rango de caracteres (inclusivo) |
\d | clase de carácter de Perl |
[:foo:] | clase foo de carácter de ASCII |
\p{Foo} | clase foo de carácter de Unicode |
\pF | clase F de carácter de Unicode (nombre de una letra) |
Clases de caracteres con nombre como elementos de clase de carácter | |
---|---|
[\d] | dígitos (≡ \d) |
[^\d] | no dígitos (≡ \D) |
[\D] | no dígitos (≡ \D) |
[^\D] | no no dígitos (≡ \d) |
[[:name:]] | clase ASCII con nombre dentro de una clase de carácter (≡ [:name:]) |
[^[:name:]] | clase ASCII con nombre en la clase de caracteres negados (≡ [:^name:]) |
[\p{Name}] | propiedad de Unicode con nombre dentro de una clase de carácter (≡ \p{Name}) |
[^\p{Name}] | propiedad de Unicode con nombre dentro de una clase de carácter negado (≡ \P{Name}) |
Nombres de clase de carácter Unicode: categoría general | |
---|---|
C | otro |
CC | control |
CF | format |
CN | puntos de código sin asignar (NO COMPATIBLE) |
CO | uso privado |
CS | sustituto |
L | letra |
LC | letra en minúsculas o mayúsculas (NO COMPATIBLE) |
L& | letra en minúsculas o mayúsculas (NO COMPATIBLE) |
Ll | letra minúscula |
LM | letra modificadora |
LO | otra letra |
LT | letra del título |
LU | letra mayúscula |
M | marca |
MC | marca de espacio |
ME | marca de cierre |
MN | marca de no espacio |
N | número |
ND | número decimal |
NL | número de letra |
No | otro número |
P | puntuación |
PC | puntuación de conector |
PD | puntuación de guion |
PE | puntuación de cierre |
PF | puntuación final |
Pi | puntuación inicial |
PO | otra puntuación |
PS | puntuación de apertura |
S | symbol |
SC | símbolo de moneda |
SK | símbolo modificador |
SM | símbolo matemático |
SO | otro símbolo |
Z | separador |
Zl | separador de línea |
ZP | separador de párrafo |
ZS | separador de espacio |
Nombres de clase de carácter Unicode: scripts |
---|
Adlam |
Ahom |
Anatolian_Hieroglyphs |
Árabe |
Armenio |
Avéstico |
Balinés |
Bamum |
Bassa_Vah |
Batak |
Bengalí |
Bhaiksuki |
Bopomofo |
Brahmi |
Braille |
Buginés |
Buhid |
Canadian_Aboriginal |
Cario |
Caucasian_Albanian |
Chakma |
Cham |
Cheroqui |
Corasmia |
Común |
Copto |
Cuneiforme |
Chipriota |
Cirílico |
Deseret |
Devanagari |
Dives_Akuru |
Dogri |
Duployán |
Egyptian_Hieroglyphs |
Elbasan |
Elymaic |
Etíope |
Georgiano |
Glagolítico |
Gótico |
Grantha |
Griego |
Gujarati |
Gunjala_Gondi |
Gurumukhi |
Han |
Hangul |
Hanifi_Rohingya |
Hanunoo |
De Hatra |
Hebreo |
Hiragana |
Imperial_Aramaic |
Heredado |
Inscriptional_Pahlavi |
Inscriptional_Parthian |
Javanés |
Kaithi |
Kannada |
Katakana |
Kayah_Li |
Karosti |
Khitan_Small_Script |
Khmer |
Khojki |
Khudabadi |
Lao |
Latino |
Lepcha |
Limbu |
Linear_A |
Linear_B |
Lisu |
Lycio |
Lydio |
Mahajani |
Makassar |
Malayalam |
Mandeo |
Maniqueo |
Marchen |
Masaram_Gondi |
Medefaidrin |
Meetei_Mayek |
Mende_Kikakui |
Meroitic_Cursive |
Meroitic_Hieroglyphs |
Miao |
Modi |
Mongol |
Mro |
Multani |
Myanmar |
Nabataeo |
Nandinagari |
New_Tai_Lue |
Newa |
Nko |
Nushu |
Nyiakeng_Puachue_Hmong |
Ogham |
Ol_Chiki |
Old_Hungarian |
Old_Italic |
Old_North_Arabian |
Old_Permic |
Old_Persian |
Old_Sogdian |
Old_South_Arabian |
Old_Turkic |
Odia |
Osage |
Osmanya |
Pahawh_Hmong |
Palmira |
Pau_Cin_Hau |
Phags_Pa |
Fenicio |
Psalter_Pahlavi |
Rejang |
Rúnico |
Samaritano |
Saurashtra |
Sharada |
Shaviano |
Siddham |
SignoEscritura |
Sinhala |
Sogdiano |
Sora_Sompeng |
Soyombo |
Sundanés |
Syloti_Nagri |
Siríaco |
Tagalo |
Tagbanwa |
Tai_Le |
Tai_Tham |
Tai_Viet |
Takri |
Tamil |
Tangut |
Telugu |
Thaana |
Tailandés |
Tibetano |
Tifinagh |
Tirhuta |
Ugarítico |
Vai |
Wancho |
Warang_Citi |
Yazidí |
Yi |
Zanabazar_Square |
clases de carácter Vim | |
---|---|
\i | carácter identificador (NO COMPATIBLE) VIM |
\I | \i excepto dígitos (NO COMPATIBLE) VIM |
\k | carácter de palabra clave (NO COMPATIBLE) VIM |
\K | \k excepto dígitos (NO COMPATIBLE) VIM |
\f | carácter de nombre de archivo (NO COMPATIBLE) VIM |
\F | \f excepto dígitos (NO COMPATIBLE) VIM |
\p | carácter imprimible (NO COMPATIBLE) VIM |
\P | \p excepto dígitos (NO COMPATIBLE) VIM |
\s | carácter de espacio en blanco (≡ [\t]) (NO COMPATIBLE) VIM |
\S | carácter de espacio no en blanco (≡ [^ \t]) (NO COMPATIBLE) VIM |
\d | dígitos (≡ [0-9]) VIM |
\D | no \d VIM |
\x | dígitos hexadecimales (≡ [0-9A-Fa-f]) (NO COMPATIBLE) VIM |
\X | no \x (NO COMPATIBLE) VIM |
\o | dígitos octales (≡ [0-7]) (NO COMPATIBLE) VIM |
\O | no \o (NO COMPATIBLE) VIM |
\w | carácter de palabra VIM |
\W | no \w VIM |
\h | head de carácter de palabra (NO COMPATIBLE) VIM |
\H | no \h (NO COMPATIBLE) VIM |
\a | alfabético (NO COMPATIBLE) VIM |
\A | no \a (NO COMPATIBLE) VIM |
\l | minúscula (NO COMPATIBLE) VIM |
\L | no minúscula (NO COMPATIBLE) VIM |
\u | mayúscula (NO COMPATIBLE) VIM |
\U | no mayúscula (NO COMPATIBLE) VIM |
_x | \x más nueva línea, para cualquier x (NO COMPATIBLE) VIM |
\c | ignorar mayúsculas o minúsculas (NO COMPATIBLE) VIM |
\C | coincidir mayúsculas o minúsculas (NO COMPATIBLE) VIM |
\m | magic (NO COMPATIBLE) VIM |
\M | nomagic (NO COMPATIBLE) VIM |
\v | verymagic (NO COMPATIBLE) VIM |
\V | verynomagic (NO COMPATIBLE) VIM |
\Z | ignorar las diferencias en Unicode que combinan caracteres (NO COMPATIBLE) VIM |
Mágico | |
---|---|
(?{code}) | código Perl arbitrario (NO COMPATIBLE) PERL |
(??{code}) | código Perl arbitrario pospuesto (NO COMPATIBLE) PERL |
(?n) | llamada recurrente para el grupo de captura regexp n (NO COMPATIBLE) |
(?+n) | llamada recurrente para el grupo relativo +n (NO COMPATIBLE) |
(?-n) | llamada recurrente para el grupo relativo -n (NO COMPATIBLE) |
(?C) | callout PCRE (NO COMPATIBLE) PCRE |
(?R) | llamada recurrente a todo el regexp (≡ (? 0)) (NO COMPATIBLE) |
(?&nombre) | llamada recurrente para el grupo con nombre (NO COMPATIBLE) |
(?P=name) | referencia inversa con nombre (NO COMPATIBLE) |
(?P>name) | llamada recurrente para el grupo con nombre (NO COMPATIBLE) |
(? (cond)true|false) | bifurcación condicional (no compatible) |
(?(cond)true) | bifurcación condicional (no compatible) |
(*ACCEPT) | convertir regexps más como prólogo (NO COMPATIBLE) |
(*COMMIT) | (NO COMPATIBLE) |
(*F) | (NO COMPATIBLE) |
(*FAIL) | (NO COMPATIBLE) |
(*MARK) | (NO COMPATIBLE) |
(*PRUNE) | (NO COMPATIBLE) |
(*SKIP) | (NO COMPATIBLE) |
(*THEN) | (NO COMPATIBLE) |
(*ANY) | establecer convención de nueva línea (NO COMPATIBLE) |
(*ANYCRLF) | (NO COMPATIBLE) |
(*CR) | (NO COMPATIBLE) |
(*CRLF) | (NO COMPATIBLE) |
(*LF) | (NO COMPATIBLE) |
(*BSR_ANYCRLF) | establecer convención \R (NO COMPATIBLE) PCRE |
(*BSR_UNICODE) | (NO COMPATIBLE) PCRE |
Nota
Algunas partes de esta página son modificaciones que se basan en trabajo creado y compartido por Chromium.org y que se usan de acuerdo con los términos descritos en la Licencia internacional de Creative Commons Atribution 4.0. La página original se puede encontrar aquí.
Este trabajo dispone de licencia conforme a Licencia internacional de Creative Commons Attribution 4.0.