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.

Tablas de sintaxis

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})
clases de caracteres Perl (todos solo ASCII)
\d dígitos (≡ [0-9])
\D no dígitos (≡ [^0-9])
\s espacio en blanco (≡ [\t\n\f\r])
\S espacio no en blanco (≡ [^\t\n\f\r])
\w caracteres de palabra (≡ [0-9A-Za-z_])
\W no caracteres de palabra (≡ [^0-9A-Za-z_])
\h espacio horizontal (NO COMPATIBLE)
\H espacio no horizontal (NO COMPATIBLE)
\v espacio vertical (NO COMPATIBLE)
\V espacio no vertical (NO COMPATIBLE)
clases de carácter ASCII
[[:alnum:]] alfanumérico (≡ [0-9A-Za-z])
[[:alpha:]] alfabético (≡ [A-Za-z])
[[:ascii:]] ASCII (≡ [\x00-\x7F])
[[:blank:]] en blanco (≡ [\t])
[[:cntrl:]] control (≡ [\x00-\x1F\x7F])
[[:digit:]] dígitos (≡ [0-9])
[[:graph:]] gráfico (≡ [!-~][A-Za-z0-9!&quot;#$%&amp;&#39;()\*+,\-./:;&lt;=&gt;?@[\\\]^_` {\|}~])
[[:lower:]] minúsculas (≡ [a-z])
[[:print:]] imprimible (≡ [-~] ≡ [[:graph:]])
[[:punct:]] puntuación (≡ [!-/:-@[-`{-~])
[[:space:]] espacio en blanco (≡ [\t\n\v\f\r])
[[:upper:]] mayúsculas (≡ [A-Z])
[[:word:]] caracteres de palabra (≡ [0-9A-Za-z_])
[[:xdigit:]] dígito hexadecimal (≡ [0-9A-Fa-f])
  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

Licencia de contenido

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í.

Licencia de Creative Commons
Este trabajo dispone de licencia conforme a Licencia internacional de Creative Commons Attribution 4.0.

Ver también