Sintaxis de expresiones regulares PCRE

Las expresiones regulares que utilizaremos para búsquedas en mongoDB son las del estándar compatible con Perl.

Notas rápidas

Clases de caracteres

.                      un carácter cualquiera excepto /n

\w \d \s          letra o dígito [A-Z a-z0 -9_], dígito [0-9], blanco [ \f\n\r\t\v]

\W \D \S        NO letra, dígito, o espacio en blanco

[abc]               cualquiera de los caracteres entre corchetes

[^abc]            ninguno de los caracteres

[a-g]               rango de caracteres entre a y g

Anclas

^abc$             comienzo de entrada o línea, final de entrada o línea

\b                   límite de palabra: espacio, retorno...

Caracteres de escape

\. \* \\           caracteres especiales de escape

\t \r \n         tabulador, retorno y salto de línea

\u00A9           carácter unicode © como código de escape

Grupos y Lookarround

(abc)             patrón o grupo de selección,  recuerda [0]..[n]

\1                  retrorreferencia a grupo #1

(?:abc)          grupo de no selección

(?=abc)         positive lookahead

(?!abc)          negative lookahead

Cuantificadores y Alternancia

a* a+ a?         0 o más veces, 1 o más veces,  0 o 1

a{5} a{2,}     exactamente n apariciones del carácter anterior, n o mas

a{1,3}            como mínimo n y como máximo m apariciones del carácter anterior

a+? a{2,}?     concordar los menos posibles

ab|cd               concordar ab o cd

\num \n octal, \xn

Modificadores

Detrás de las contrabarras:

i  Si se aplica este modificador, las letras en el patrón coincidirán tanto con letras mayúsculas como minúscula

m  Si se aplica este modificador, las letras en el patrón coincidirán tanto con letras mayúsculas como minúscula

S  Si se aplica este modificador, un meta-carácter punto en el patrón coincide con todos los caracteres, incluyendo nuevas líneas. Sin él, las nuevas líneas son excluidas. Este modificador es equivalente al modificador /s de Perl. Una clase negativa como [^a] siempre coincidirá con un carácter de nueva línea, independientemente de la aplicación de este modificador.

x Si se aplica este modificador, los caracteres de información de espacios en blanco en el patrón se ignoran totalmente excepto cuando están escapados o dentro de una clase carácter, y los caracteres entre un # sin escapar fuera de una clase carácter y el siguiente carácter nueva línea, inclusive, también son ignorados. Esto es equivalente al modificador /x de Perl, y hace posible incluir comentarios dentro de patrones complicados. Observe, sin embargo, que esto se aplica sólo a caracteres de información. Los caracteres espacio en blanco nunca pueden aparecer dentro de secuencias de caracteres especiales en un patrón, por ejemplo dentro de la secuencia (?( la cual inicia un sub-patrón condicional.

A  Si se aplica este modificador, el patrón es forzado a ser "anclado", es decir, se le obliga a coincidir sólo con el inicio de la cadena que está siendo buscada (la "cadena objetivo"). Este efecto también se puede lograr mediante construcciones apropiadas en el patrón mismo, lo cual es la única manera de hacerlo en Perl.

D  Si se aplica este modificador, un meta-carácter dólar en el patrón coincidirá sólo con el final de la cadena objetivo. Sin este modificador, un dólar coincide también inmediatamente antes del carácter final si éste es una nueva línea (pero no antes de cualquier otra nueva línea). Este modificador es ignorado si el modificadr m se aplica. No existe equivalente a este modificador en Perl.

S  Cuando un patrón se va a usar varias veces, merece la pena dedicar más tiempo a analizarlo a fin de acelerar el tiempo tomado para las comparaciones. Si se aplica este modificador, se realiza este análisis extra. Actualmente, estudiar un patrón es útil sólamente para patrones no anclados que no tienen un carácter de inicio único fijo.

U  Este modificador invierte la "codicia" de los cuantificadores de modo que no sean codiciosos por defecto, pero se vuelven codiciosos si son seguidos por ?. Esto no es compatible con Perl. También se puede aplicar por un modificador de ajuste dentro del patrón (?U) o por un signo de interrogación detrás del cuantificador (p.ej. .*?).

Documentación procedente de:

http://regexr.com/

http://upv.s3.amazonaws.com/GeoEuskadiDemo/documentacion/javascript-Cheat-Sheet.pdf

Notas detalladas

Los patrones de las expresiones reguladores compatibles con Perl deben empezar y acabar con un delimitador, que normalmente es la barra (/). En caso de que la barra forme parte del patrón, se puede:

- escribir en el patrón la barra precedida de una contrabarra (\/)

- utilizar otro carácter, que no sea uno de los caracteres especiales, como delimitador (por ejemplo, !, -, etc.)

 

Los patrones de expresiones regulares compatibles con Perl admiten modificadores, que se incluyen en el patrón, después del limitador final.

Los siguientes patrones son comunes a POSIX extendido y a compatibles con Perl, con una diferencia muy importante que es que las clases de carácter que incluyen caracteres alfabéticos ([[:alnum:]], [[:alpha:]], etc.) en POSIX no incluyen vocales acentuadas, ñ, ç, etc, mientras que en PECR sí.

Patrón Significado
c carácter c
. cualquier carácter
^c empezar por el carácter c
c$ terminar por el carácter c
c+ 1 o más caracteres c
c* 0 o más caracteres c
c? 0 o 1 caracteres c
\n nueva línea
\t tabulador
\ escape, para escribir delante de caracteres especiales: ^ . [ ] % ( ) | * ? { } \
(cd) caracteres c y d agrupados
c|d carácter c o d
c{n} n veces el carácter c
c{n,} n o más caracteres c
c{n,m} desde n hasta m caracteres c
[a-z] cualquier letra minúscula
[A-Z] cualquier letra mayúscula
[0-9] cualquier dígito
[cde] cualquiera de los caracteres c, d o e
[c-f] cualquier letra entre c y f (es decir, c, d, e o f)
[^c] que no esté el carácter c
[[:alnum:]] cualquier letra o dígito
[[:alpha:]] cualquier letra
[[:digit:]] cualquier dígito
[[:lower:]] cualquier letra minúscula
[[:punct:]] cualquier marca de puntuación
[[:space:]] cualquier espacio en blanco
[[:upper:]] cualquier letra mayúscula

Los siguientes patrones son exclusivos de compatibles con Perl y no existen en POSIX extendido:

Patrón Significado
[[:ascii:]] caracteres con código ASCII de 0 a 127
[[:blank:]] espacios o tabuladores
[[:cntrl:]] caracteres de control
[[:graph:]] caracteres de impresión, salvo el espacio
[[:print:]] caracteres de impresión, espacio incluido
[[:word:]]
cualquier letra o dígito y el guión bajo
[[:xdigit:]] cualquier dígito hexadecimal
\w cualquier letra o dígito y el guión bajo
\W cualquier cosa que no sea letra o dígito y el guión bajo
\s cualquier espacio en blanco
\S cualquier cosa que no sea un espacio en blanco
\d cualquier dígito
\D cualquier cosa que no sea un dígito
\b inicio o final de palabra
\A comienzo
\Z final (incluido salto de línea)
\z final

Ejemplos de expresiones regulares

Patrón Cadena ¿Cumple? Comentario
abc awbwc No Los caracteres tienen que estar seguidos.
34abc No importa que hayan caracteres antes...
cbabcba ... o después.
a2b g1da2b3 Las expresiones regulares detectan letras, números, ...
áb 3áb4 ... incluso acentos, ...
a\$b 1a$b2 ... salvo los caracteres ^ . [ $ ( ) | * + ? { \ €
que deben llevar una contrabarra \ antes, 
además de \n (nueva línea) y \t (tabulador)
[aeiou] bic Los corchetes definen los caracteres admitidos en una posición ...
bcd No
[^aeiou] bic ... o no admitidos
aei No
[p-t] avr Se pueden definir rangos de caracteres...
av1 No
[B-D] PMD ... en minúsculas o mayúsculas ...
AV1 No
[0-9] b9d ... o números
bcd No
[[:alpha:]] Cualquier carácter alfabético
[[:digit:]] Cualquier número
[[:alnum:]] Cualquier número o carácter alfabéticos
[[:punct:]] Cualquier carácter que no sean letras y números (menos el euro)
[[:space:]] Cualquier tipo de espacio en blanco
[[:upper:]] Cualquier mayúscula
[[:lower:]] Cualquier minúscula
^ab cab No Los caracteres tienen que estar al principio
abc No importa que hayan caracteres después
ab$ abc No Los caracteres tienen que estar al final
cab No importa que hayan caracteres antes
^ab$ ab Tiene que empezar y acabar por ab ...
abab No ... y no puede haber nada antes o después
ab?c abcde El carácter b puede estar entre a y c...
acde ... o no estar entre a y c ...
adcde No ... pero no puede haber otro carácter
a.c abc El . representa cualquier carácter ...
a c ... incluso el espacio el blanco, ...
ac No pero no la ausencia del carácter
abdc No o varios caracteres.
ab+c abcde El carácter b puede estar una vez...
abbbcde ... o varias ...
acde No ... pero tiene que estar al menos una vez.
ab*c abcde El carácter b puede estar una vez...
abbbcde ... o varias ...
acde ... o ninguna.
ab{3}c abbbc Las llaves indican el número exacto de repeticiones del carácter, ...
abbbbc No ... no puede haber más ...
abbc No ... ni menos.
ab{2,4}c abc No Se pueden definir rangos con límite inferior y superior
abbc
abbbc SSí
abbbbc
abbbbbc No
ab{2,}c abc No Se pueden definir rangos sin límite superior
a(bc){2}d abcbcd Los paréntesis definen agrupaciones de caracteres.
En este caso bc tiene que aparecer repetido
a(bc)?d abcd Aquí bc puede estar ...
ad ... o no estar, ...
abd No ... pero no puede aparecer sólo la b, o sólo la c u otro carácter
^a(b|d)c$ abc Entre la a al principio y la c al final puede estar el carácter b...
adc ... o el carácter d, ...
abdc No ... pero no los dos, ...
ac No ... ni ninguno de ellos.
^(ab)|(dc)$ abc Está la pareja ab al principio ...
adc ... o dc ...
abdc ... o las dos, ...
ac No ... pero no ninguna
^(ab)$|^(dc)$ abc No Está la pareja ab, pero sobra la c ...
adc No ... o está la pareja dc, pero sobra la a.
dc Está una de las dos

 

Documentación extraída de:

http://www.mclibre.org/consultar/php/lecciones/php_expresiones_regulares.html
http://www.php.net/manual/es/reference.pcre.pattern.modifiers.php