Algunas definiciones antes de comenzar

Expresión Significado
literal literal es un carácter que usaremos como una expresión de búsqueda o de coincidencia, por ejemplo, para encontrar ind en windows ind es una cadena literal -cada carácter es tenido en cuenta en una búsqueda, esta cadena es literalmente la cadena que buscamos.
metacaracter Un metacaracter es uno o mas carácter especiales que tienen un solo significado y que no pueden ser usados como literal en una expresión de búsqueda, por ejemplo, el caracter ^ es un metacaracter.
Cadena Objetivo Este termino describe la cadena que estamos buscando, este es la cadena que queremos encontrar o coincidir en el patron de búsqueda.
expresión de búsqueda Más comúnmente llamado expresión regular. Este termino describe la expresión de búsqueda que estamos usando para buscar nuestra cadena objetivo, es el patron de búsqueda.
Secuencia escapada Una secuencia escapada es la forma de indicar que queremos usar un metacaracter como un literal. En una expresión regular una secuencia escapada se indica usando la barra invertida () anteriormente a la secuencia escapada, por ejemplo si necesitamos encontrar la (S) en window(s) deberíamos usar la expresión (s) y si queremos encontrar archivo en el objetivo C:archivo entonces necesitamos usar la expresión literal archivo (¡si! para escapar la barra invertida debemos escapar con otra barra invertida o ****).

Nuestra cadena objetivo de ejemplo

A lo largo de esta guía usaremos las siguientes cadenas objetivos de ejemplo

STRING 1     Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)
STRING 2     Mozilla/4.75 [en](X11;U;Linux2.2.16-22 i586)

Estos son variables entregadas por HTTP_USER_AGENT y corresponden a la identificación de navegadores web. Si son de navegadores antiguos pero servirán.

Coincidencias simples

expresión de búsqueda cadena objetivo resultado Detalle
m STRING1

STRING2
Acierto

Vació
Encuentra m en compatible

No existe m minúscula en el STRING2
a/4 STRING1

STRING2
Acierto

Acierto
Encuentra a/4 en Mozilla/4.0

Encuentra a/a en Mozilla/4.0
5 [ STRING1

STRING2
Vació

Acierto
No existe ningún 5 [ en el patrón

Encuentra Mozilla/4.75 [en]

Corchetes, rangos y negaciones

Las expresiones de corchetes nos introduce en el los primeros metacarateres, en este caso nos permiten definir una lista de cosas para probar en lugar de probar caracteres simples como hemos ido haciendo hasta ahora. Estas listas pueden ser agrupaciones de grupos que son bien conocidos como los números.

Metacaracter Significado
[] Encuentra cualquier cosa adentro de los corchetes pero solo para UN posición de carácter, una sola vez a la vez. Por ejemplo [123] busca 1 en todo la cadena objetivo y si este no coincide busca el 2 y por ultimo el 3.
- El guión (-) adentro de corchetes es el separador de rango y permite definir un rango, por ejemplo en vez de [0123456789] podemos escribir este como [0-9].

Se puede definir más de un rango en una lista, por ejemplo, [0-9A-C] significa que la expresión debe chequear del 0 al 9 y del A al C (pero no la C).

Para probar el guión adentro de los corchetes este debe ser el primero o el ultimo, [-0-9] este comprueba el guión primero y luego del 0 al 9.
^ Signo de intercalación o acento circunflejo adentro de corchetes se utiliza para negar una lista de caracteres. Por ejemplo [^Ff] se utiliza para comprobar cualquier carácter excepto la F y la f y [^a-z] se utiliza para comprobar cualquier carácter menos los caracteres que van de la a a la z en minúsculas.

Bien ahora vamos a probar estas cosas nueva en nuestras cadenas objetivos.

expresión de búsqueda cadena objetivo resultado Detalle
in[du] STRING1

STRING2
Acierto

Acierto
Encuentra ind en Windows

encuentra inu en Linux
x[0-9A-Z] STRING1

STRING2
Vació

Acierto
Como la expresión es sensible a las mayúsculas y minúsculas no encuentra la palabra DigExt para ello debemos usar [0-9a-z]
Encuentra x2 en Linux2
^A-M]in STRING1

STRING2
Acierto

Vació
Encontramos Win en Windows

Hemos excluido el rango de la A hasta la M por ello no hemos logrado encontrar Lin en Linux

Metacaracteres Iteradores

El siguiente es un conjunto de metacaracteres iteradores, que permiten controlar el numero de veces que preceden a un carácter para ser encontrado en una búsqueda.

Metacaracter Significado
? El ? (signo de pregunta) encuentra cuando esta precedido por un carácter cuando este ocurre 0 o 1 vez. Por ejemplo colo?r encuentra color (donde no se encontró ningún carácter) y encuentra colour (donde si se encontró un un caracter)
* El (asterisco) encuentra cuando esta precedido por un carácter cuando este ocurre 0 o más veces. Por ejemplo, tre encuentra tree (e es encontrado 2 veces), tread (e es encontrado una vez) y trough (donde e no se encuentra y solo esta tr)
+ El + (signo de más) encuentra cuando esta precedido por un carácter cuando la coincidencia se da 1 o más veces, por ejemplo tre+ encuentra tree (2 coincidencias) tread (1 coincidencia) pero no encuentra trough (donde no hay coincidencia).
{n} Las {} (llaves) cuando esta precedidas por un carácter, o un rango de caracteres, y encierran un numero n, encuentra solamente cuando el resultado aparece exactamente n veces, por ejemplo en [0-9]{3}-[0-9]{5} sirve para encontrar celulares locales como por ejemplo 156-43212.
{n,m} Encuentra el carácter precedido en el rango entre n y m, por ejemplo ba{2,4}b encuentra baab, baaab y baaaab, pero no bab o baaaab
{n,} Encuentra el carácter precedido aparece aunque sea n vez, por ejemplo ba{2,}b encuentra baab, baaaaab pero no bab.

Esto se puede haber entendido para algunos, pero es importante remarcar que solo el inmediatamente anterior carácter o expresión de rango precedente toma parte de la iteración. Sabiendo esto probemos lo sabido en nuestras cadenas objetivos.

expresión de búsqueda cadena objetivo resultado Detalle
(.*l STRING1

STRING2
Acierto

vacio
Encuentra (compatibl.

Sin aciertos
W*in STRING1

STRING2
Acierto

Acierto
Encuentra Win en windows

Encuentra in en Linux
[xX][0-9a-z]{2} STRING1

STRING2
vació

Acuerdo
Encuentra x en DigExt pero esta tiene solo una t

Encuentra X y 11 en X11.

Más "Metacaracteres"

El siguiente conjunto de caracteres agregan poder adicional a nuestras búsquedas.

Metacaracter Significado
() Los paréntesis pueden ser usados para agrupar (o enlazar) partes de nuestras expresiones de búsquedas juntas. Oficialmente son conocidas como subexpresiones regulares y estas pueden ser anidadas a cualquier profundidad. Los paréntesis (subexpresiones) capturan coincidencias dentro de una variable que nos permite crear referencias inversas.
| La barra vertical es también llamada alternancia es usada como un disyuntor lógico, más conocido como OR, por ejemplo, gr(a|e)y encuentra gray o grey, en ese orden. Si es encontrado gray no se busca grey.

Probemos estas nuevos metacaracteres en nuestras cadenas objetivos de ejemplos.

expresión de búsqueda cadena objetivo resultado Detalle
^([L-Z]in) STRING1

STRING2
Vacio

vacio
Win no empieza la cadena por eso es falso

Lin no empieza la cadena por eso es falso
((4.[0-3]) | (2.[0-3])) STRING1

STRING2
Acierto

Acierto
Encuentra 4.0 en Mozilla/4.0

Encuentra 2.2 en Linux2.2.16-22
(W|L)in STRING1

STRING2
Acierto

vacio
Encuentra Win en Windows

Encuentra Lin en Linux

Caracteres POSIX especiales

Metacaracter Significado
[:upper:] Cualquier carácter alfanumérico de la A a la Z
[:lower:] Cualquier Carácter alfanumérico de la a a la z
[:digit:] Solo dígitos de 0 a 9
[:blank:] Espacios caracteres TAB
[:xdigit:] Notación hexadecimal de 0-9 y de A-F, a-f
[:punct:] Símbolo de puntuación . , " ' ? ! ; : # $ % & () * + - / < > = @ [ ] ^ _ { } ~
[:cntrl:] Caracteres de control NL CR LF TAB VT FF NUL SOH STX EXT EOT ENQ ACK SO SI DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC IS1 IS2 IS3 IS4 DEL
[:space:] Cualquier carácter con espacio en blancos en muchos sistemas esta abreviado como s.
[:alnum:] Cualquier carácter alfanumérico, de 0-9, A-Z y a-z.
[:print:] Cualquier carácter "printable", al conjunto de caracteres alfanuméricos se le suma los de puntuación y el espacio en blanco.
[:graph:] Cualquier carácter "printable", al conjunto anterior le excluimos el espacio en blanco.

Abreviaciones POSIX

Abreviación POSIX equivalente
\d [:digit:]
\D [^[:digit:]]
\s [:space:] Excepto VT que no es reconocido
\S [^[:space:]]
\w [:graph:]
\W [^[:graph]]

Abreviaciones posicionales

Abreviación Significado
\b Encuentra cualquier carácter al principio (bxx) o al final (xxb) de una palabra.
\B Encuentra cualquier carácter que no este ni al principio ni al final de una palabra.