Ir al contenido principal

Tabla de Expresiones Regulares



S铆mbolos comunes en expresiones regulares

Expresi贸n
Descripci贸n
.
Un punto indica cualquier car谩cter
^expresi贸n
El s铆mbolo ^ indica el principio del String. En este caso el String debe contener la expresi贸n al principio.
expresi贸n$
El s铆mbolo $ indica el final del String. En este caso el String debe contener la expresi贸n al final.
[abc]
Los corchetes representan una definici贸n de conjunto. En este ejemplo el String debe contener las letras a 贸 b 贸 c.
[abc][12]
El String debe contener las letras a 贸 b 贸 c seguidas de 1 贸 2
[^abc]
El s铆mbolo ^ dentro de los corchetes indica negaci贸n. En este caso el String debe contener cualquier car谩cter excepto a 贸 b 贸 c.
[a-z1-9]
Rango. Indica las letras min煤sculas desde la a hasta la z (ambas incluidas) y los d铆gitos desde el 1 hasta el 9 (ambos incluidos)
A|B
El car谩cter | es un OR.  A 贸 B
AB
Concatenaci贸n. A seguida de B

Meta caracteres

Expresi贸n
Descripci贸n
\d
D铆gito. Equivale a [0-9]
\D
No d铆gito. Equivale a [^0-9]
\s
Espacio en blanco. Equivale a [ \t\n\x0b\r\f]
\S
No espacio en blanco. Equivale a [^\s]
\w
Una letra may煤scula o min煤scula, un d铆gito o el car谩cter _
Equivale a  [a-zA-Z0-9_]
\W
Equivale a [^\w]
\b
L铆mite de una palabra.
En Java debemos usar una doble barra invertida \\
Por ejemplo para utilizar  \w tendremos que escribir \\w. Si queremos indicar que
la barra invertida en un car谩cter de la expresi贸n regular tendremos que escribir  \\\\.
Cuantificadores
Expresi贸n
Descripci贸n
{X}
Indica que lo que va justo antes de las llaves se repite X veces
{X,Y}
Indica que lo que va justo antes de las llaves se repite m铆nimo X veces y m谩ximo
Y veces. Tambi茅n podemos poner {X,} indicando que se repite un m铆nimo de 
X veces sin l铆mite m谩ximo.
*
Indica 0 贸 m谩s veces. Equivale a {0,}
+
Indica 1 贸 m谩s veces. Equivale a {1,}
?
Indica 0 贸 1 veces. Equivale a {0,1}



[abc]Representa un car谩cter que puede
ser 'a' 贸 'b' 贸 'c'.
[^abc]Representa cualquier car谩cter
excepto 'a' y 'b' y 'c'; en este caso cuando digo cualquier caracter,
no me refiero solo a letras.
[a-z]Representa el rango comprendido
de la 'a' hasta la 'z', ojo no incluye '帽', vocales con tildes, ni
consonantes con di茅resis, en pocas palabras solo se aceptan el alfabeto
ingles.
[a-z帽]Representa el rango comprendido
de la 'a' hasta la 'z', esta vez si incluye '帽', ojo solo incluye a la
'帽', si queremos incluir m谩s caracteres los colocamos al lado de la '帽'.
[A-Z]Representa el rango comprendido
de la 'A' hasta la 'Z', ojo no incluye '帽', solo el alfabeto ingles.
[a-zA-Z]Representa el rango comprendido
de la 'a' hasta la 'z' 贸 'A' hasta la 'Z',pero solo el alfabeto ingles.
[a-d[m-p]]Es equivalente a [a-dm-p],
n贸tese que es parecido a la expresi贸n anterior, representa el rango
comprendido de la 'a' hasta la 'b' y 'm' hasta la 'p', es decir solo
quedan incluidas 'a','b','c','d' y 'm','n','o','p'.
[a-z&&[def]]Es equivalente a [def], es la
intersecci贸n del conjunto de la 'a' hasta la 'z' y el conjunto
'd','e','f', el resultado es el mismo conjunto 'd','e','f'; aunque se
ve innecesario esta expresi贸n  nos ayudara a comprender la que
sigue.
[a-z&&[^def]]Representa la intersecci贸n del
conjunto de la 'a' hasta la 'z' y el conjunto todo el abecedario
excepto los caracteres 'd','e','f', el resultado es el conjunto del
abecedario excluyendo 'd','e','f'.
[a-z&&[^m-p]]Representa la intersecci贸n del
conjunto de la 'a' hasta la 'z' y el conjunto todo el abecedario
excepto los caracteres 'm','n','o','p'.


Descripci贸n de las expresiones regulares

El punto "."

El punto se interpreta por el motor de b煤squeda como "cualquier car谩cter", es decir, busca cualquier car谩cter SIN incluir los saltos de l铆nea. Los motores de Expresiones regulares tienen una opci贸n de configuraci贸n que permite modificar este comportamiento. En .Net Framework se utiliza la opci贸n RegexOptions.Singleline para especificar la opci贸n de que busque todos los caracteres incluidos el salto de l铆nea (\n).

El punto se utiliza de la siguiente forma: Si se le dice al motor de RegEx que busque "g.t" en la cadena "el gato de piedra en la g贸tica puerta de getisboro goot" el motor de b煤squeda encontrar谩 "gat", "g贸t" y por 煤ltimo "get". N贸tese que el motor de b煤squeda no encuentra "goot"; esto es porque el punto representa un solo car谩cter y 煤nicamente uno. Si es necesario que el motor encuentre tambi茅n la expresi贸n "goot", ser谩 necesario utilizar repeticiones, las cuales se explican m谩s adelante.

Aunque el punto es muy 煤til para encontrar caracteres que no conocemos, es necesario recordar que corresponde a cualquier car谩cter y que muchas veces esto no es lo que se requiere. Es muy diferente buscar cualquier car谩cter que buscar cualquier car谩cter alfanum茅rico o cualquier d铆gito o cualquier no-d铆gito o cualquier no-alfanum茅rico. Se debe tomar esto en cuenta antes de utilizar el punto y obtener resultados no deseados.

El signo de admiraci贸n "!"

Se utiliza para realizar una "b煤squeda anticipada negativa". La construcci贸n de la expresi贸n regular es con el par de par茅ntesis, el par茅ntesis de apertura seguida de un signo de interrogaci贸n y un signo de exclamaci贸n. Dentro de la b煤squeda tenemos la expresi贸n regular. Por ejemplo, para excluir exactamente una palabra, habr谩 que utilizar "^(palabra.+|(?!palabra).*)$"

La barra inversa o contrabarra "\"

La barra inversa se utiliza para escapar el siguiente car谩cter de la expresi贸n de b煤squeda de forma que este adquiera un significado especial o deje de tenerlo. O sea, la barra inversa no se utiliza nunca por s铆 sola, sino en combinaci贸n con otros caracteres. Al utilizarlo por ejemplo en combinaci贸n con el punto "\." este deja de tener su significado normal y se comporta como un car谩cter literal.

De la misma forma, cuando se coloca la barra inversa seguida de cualquiera de los caracteres especiales que discutiremos a continuaci贸n, estos dejan de tener su significado especial y se convierten en caracteres de b煤squeda literal.

Como ya se mencion贸 con anterioridad, la barra inversa tambi茅n puede darle significado especial a caracteres que no lo tienen. A continuaci贸n hay una lista de algunas de estas combinaciones:

  • \t — Representa un tabulador.
  • \r — Representa el "retorno de carro" o "regreso al inicio" o sea el lugar en que la l铆nea vuelve a iniciar.
  • \n — Representa la "nueva l铆nea" el car谩cter por medio del cual una l铆nea da inicio. Es necesario recordar que en Windows es necesaria una combinaci贸n de \r\n para comenzar una nueva l铆nea, mientras que en Unix solamente se usa \n y en Mac_OS cl谩sico se usa solamente \r.
  • \a — Representa una "campana" o "beep" que se produce al imprimir este car谩cter.
  • \e — Representa la tecla "Esc" o "Escape"
  • \f — Representa un salto de p谩gina
  • \v — Representa un tabulador vertical
  • \x — Se utiliza para representar caracteres ASCII o ANSI si conoce su c贸digo. De esta forma, si se busca el s铆mbolo de derechos de autor y la fuente en la que se busca utiliza el conjunto de caracteres lat铆n-1 es posible encontrarlo utilizando \xA9".
  • \u — Se utiliza para representar caracteres Unicode si se conoce su c贸digo. "\u00A2" representa el s铆mbolo de centavos. No todos los motores de Expresiones Regulares soportan Unicode. El .Net Framework lo hace, pero el EditPad Pro no, por ejemplo.
  • \d — Representa un d铆gito del 0 al 9.
  • \w — Representa cualquier car谩cter alfanum茅rico.
  • \s — Representa un espacio en blanco.
  • \D — Representa cualquier car谩cter que no sea un d铆gito del 0 al 9.
  • \W — Representa cualquier car谩cter no alfanum茅rico.
  • \S — Representa cualquier car谩cter que no sea un espacio en blanco.
  • \A — Representa el inicio de la cadena. No un car谩cter sino una posici贸n.
  • \Z — Representa el final de la cadena. No un car谩cter sino una posici贸n.
  • \b — Marca la posici贸n de una palabra limitada por espacios en blanco, puntuaci贸n o el inicio/final de una cadena.
  • \B — Marca la posici贸n entre dos caracteres alfanum茅ricos o dos no-alfanum茅ricos.

Notas:

  • Utilidades como Charmap.exe de Windows o gucharmap de GNOME permiten encontrar los c贸digos ASCII/ANSI/UNICODE para utilizarlos en Expresiones Regulares.
  • Algunos lenguajes, como Java, asignan su propio significado a la barra invertida, por lo que deber谩 repetirse para que sea considerada una expresi贸n regular (ejemplo String expresion="\\d.\\d" para indicar el patr贸n \d.\d).

Los corchetes "[ ]"

La funci贸n de los corchetes en el lenguaje de las expresiones regulares es representar "clases de caracteres", o sea, agrupar caracteres en grupos o clases. Son 煤tiles cuando es necesario buscar uno de un grupo de caracteres. Dentro de los corchetes es posible utilizar el guion "-" para especificar rangos de caracteres. Adicionalmente, los metacaracteres pierden su significado y se convierten en literales cuando se encuentran dentro de los corchetes. Por ejemplo, como vimos en la entrega anterior "\d" nos es 煤til para buscar cualquier car谩cter que represente un d铆gito. Sin embargo esta denominaci贸n no incluye el punto "." que divide la parte decimal de un n煤mero. Para buscar cualquier car谩cter que representa un d铆gito o un punto podemos utilizar la expresi贸n regular "[\d.]". Como se hizo notar anteriormente, dentro de los corchetes, el punto representa un car谩cter literal y no un metacar谩cter, por lo que no es necesario antecederlo con la barra inversa. El 煤nico car谩cter que es necesario anteceder con la barra inversa dentro de los corchetes es la propia barra inversa. La expresi贸n regular "[\dA-Fa-f]" nos permite encontrar d铆gitos hexadecimales. Los corchetes nos permiten tambi茅n encontrar palabras aun si est谩n escritas de forma err贸nea, por ejemplo, la expresi贸n regular "expresi[o贸]n" permite encontrar en un texto la palabra "expresi贸n" aunque se haya escrito con o sin tilde. Es necesario aclarar que sin importar cuantos caracteres se introduzcan dentro del grupo por medio de los corchetes, el grupo s贸lo le dice al motor de b煤squeda que encuentre un solo car谩cter a la vez, es decir, que "expresi[o贸]n" encontrar谩 "expresion" o "expresi贸n".

La barra "|"

Sirve para indicar una de varias opciones. Por ejemplo, la expresi贸n regular "a|e" encontrar谩 cualquier "a" o "e" dentro del texto. La expresi贸n regular "este|oeste|norte|sur" permitir谩 encontrar cualquiera de los nombres de los puntos cardinales. La barra se utiliza com煤nmente en conjunto con otros caracteres especiales.

El signo de d贸lar "$"

Representa el final de la cadena de caracteres o el final de la l铆nea, si se utiliza el modo multi-l铆nea. No representa un car谩cter en especial sino una posici贸n. Si se utiliza la expresi贸n regular "\.$" el motor encontrar谩 todos los lugares donde un punto finalice la l铆nea, lo que es 煤til para avanzar entre p谩rrafos.

El acento circunflejo "^"

Este car谩cter tiene una doble funcionalidad, que difiere cuando se utiliza individualmente y cuando se utiliza en conjunto con otros caracteres especiales. En primer lugar su funcionalidad como car谩cter individual: el car谩cter "^" representa el inicio de la cadena (de la misma forma que el signo de d贸lar "$" representa el final de la cadena). Por tanto, si se utiliza la expresi贸n regular "^[a-z]" el motor encontrar谩 todos los p谩rrafos que den inicio con una letra min煤scula. Cuando se utiliza en conjunto con los corchetes de la siguiente forma "[^\w ]" permite encontrar cualquier car谩cter que NO se encuentre dentro del grupo indicado. La expresi贸n indicada permite encontrar, por ejemplo, cualquier car谩cter que no sea alfanum茅rico o un espacio, es decir, busca todos los s铆mbolos de puntuaci贸n y dem谩s caracteres especiales.

La utilizaci贸n en conjunto de los caracteres especiales "^" y "$" permite realizar validaciones en forma sencilla. Por ejemplo "^\d$" permite asegurar que la cadena a verificar representa un 煤nico d铆gito "^\d\d/\d\d/\d\d\d\d$" permite validar una fecha en formato corto, aunque no permite verificar si es una fecha v谩lida, ya que 99/99/9999 tambi茅n ser铆a v谩lido en este formato; la validaci贸n completa de una fecha tambi茅n es posible mediante expresiones regulares, como se ejemplifica m谩s adelante.

Los par茅ntesis "()"

De forma similar que los corchetes, los par茅ntesis sirven para agrupar caracteres, sin embargo existen varias diferencias fundamentales entre los grupos establecidos por medio de corchetes y los grupos establecidos por par茅ntesis:

  • Los caracteres especiales conservan su significado dentro de los par茅ntesis.
  • Los grupos establecidos con par茅ntesis establecen una "etiqueta" o "punto de referencia" para el motor de b煤squeda que puede ser utilizada posteriormente como se denota m谩s adelante.
  • Utilizados en conjunto con la barra "|" permite hacer b煤squedas opcionales. Por ejemplo la expresi贸n regular "al (este|oeste|norte|sur) de" permite buscar textos que den indicaciones por medio de puntos cardinales, mientras que la expresi贸n regular "este|oeste|norte|sur" encontrar铆a "este" en la palabra "esteban", no pudiendo cumplir con este prop贸sito.
  • Utilizados en conjunto con otros caracteres especiales que se detallan posteriormente, ofrece funcionalidad adicional.

El signo de interrogaci贸n "?"

El signo de interrogaci贸n tiene varias funciones dentro del lenguaje de las expresiones regulares. La primera de ellas es especificar que una parte de la b煤squeda es opcional. Por ejemplo, la expresi贸n regular "ob?scuridad" permite encontrar tanto "oscuridad" como "obscuridad". En conjunto con los par茅ntesis redondos permite especificar que un conjunto mayor de caracteres es opcional; por ejemplo "Nov(\.|iembre|ember)?" permite encontrar tanto "Nov" como "Nov.", "Noviembre" y "November". Como se mencion贸 anteriormente, los par茅ntesis nos permiten establecer un "punto de referencia" para el motor de b煤squeda. Sin embargo, algunas veces, no se desea utilizarlos con este prop贸sito, como en el ejemplo anterior "Nov(\.|iembre|ember)?". En este caso el establecimiento de este punto de referencia (que se detalla m谩s adelante) representa una inversi贸n in煤til de recursos por parte del motor de b煤squeda. Para evitarlo se puede utilizar el signo de pregunta de la siguiente forma: "Nov(?:\.|iembre|ember)?". Aunque el resultado obtenido ser谩 el mismo, el motor de b煤squeda no realizar谩 una inversi贸n in煤til de recursos en este grupo, sino que lo ignorar谩. Cuando no sea necesario reutilizar el grupo, es aconsejable utilizar este formato. De forma similar, es posible utilizar el signo de pregunta con otro significado: Los par茅ntesis definen grupos "an贸nimos", sin embargo el signo de pregunta en conjunto con los par茅ntesis triangulares "<>" permite "nombrar" estos grupos de la siguiente forma: "^(?<D铆a>\d\d)\/(?<Mes>\d\d)\/(?<A帽o>\d\d\d\d)$"; Con lo cual se le especifica al motor de b煤squeda que los primeros dos d铆gitos encontrados llevar谩n la etiqueta "D铆a", los segundos la etiqueta "Mes" y los 煤ltimos cuatro d铆gitos llevar谩n la etiqueta "A帽o".

NOTA: a pesar de la complejidad y flexibilidad dada por los caracteres especiales estudiados hasta ahora, en su mayor铆a nos permiten encontrar solamente un car谩cter a la vez, o un grupo de caracteres a la vez. Los metacaracteres enumerados en adelante permiten establecer repeticiones.

Las llaves "{}"

Com煤nmente las llaves son caracteres literales cuando se utilizan por separado en una expresi贸n regular. Para que adquieran su funci贸n de metacaracteres es necesario que encierren uno o varios n煤meros separados por coma y que est茅n colocados a la derecha de otra expresi贸n regular de la siguiente forma: "\d{2}" Esta expresi贸n le dice al motor de b煤squeda que encuentre dos d铆gitos contiguos. Utilizando esta f贸rmula podr铆amos convertir el ejemplo "^\d\d/\d\d/\d\d\d\d$" que serv铆a para validar un formato de fecha en "^\d{2}/\d{2}/\d{4}$" para una mayor claridad en la lectura de la expresi贸n.

"\d{2,4}" Esta forma a帽ade un segundo n煤mero separado por una coma, el cual indica al motor de b煤squeda que como m谩ximo debe aparecer 4 veces la expresi贸n regular \d. Los posibles valores son:

  • "^\d\d$" (m铆nimo 2 repeticiones)
  • "^\d\d\d$"(tiene 3 repeticiones, por lo tanto entra en el rango 2-4)
  • "^\d\d\d\d$" (m谩ximo 4 repeticiones)

Nota: aunque esta forma de encontrar elementos repetidos es muy 煤til, algunas veces no se conoce con claridad cuantas veces se repite lo que se busca o su grado de repetici贸n es variable. En estos casos los siguientes metacaracteres son 煤tiles.

El asterisco "*"

El asterisco sirve para encontrar algo que se encuentra repetido 0 o m谩s veces. Por ejemplo, utilizando la expresi贸n "[a-zA-Z]\d*" ser谩 posible encontrar tanto "H" como "H1", "H01", "H100" y "H1000", es decir, una letra seguida de un n煤mero indefinido de d铆gitos. Es necesario tener cuidado con el comportamiento del asterisco, ya que este, por defecto, trata de encontrar la mayor cantidad posible de caracteres que correspondan con el patr贸n que se busca. De esta forma si se utiliza "\(.*\)" para encontrar cualquier cadena que se encuentre entre par茅ntesis y se lo aplica sobre el texto "Ver (Fig. 1) y (Fig. 2)" se esperar铆a que el motor de b煤squeda encuentre los textos "(Fig. 1)" y "(Fig. 2)", sin embargo, debido a esta caracter铆stica, en su lugar encontrar谩 el texto "(Fig. 1) y (Fig. 2)". Esto sucede porque el asterisco le dice al motor de b煤squeda que llene todos los espacios posibles entre los dos par茅ntesis. Para obtener el resultado deseado se debe utilizar el asterisco en conjunto con el signo de interrogaci贸n de la siguiente forma: "\(.*?\)" Esto es equivalente a decirle al motor de b煤squeda que "Encuentre un par茅ntesis de apertura y luego encuentre cualquier secuencia de caracteres hasta que encuentre un par茅ntesis de cierre".

El signo de suma "+"

Se utiliza para encontrar una cadena que se encuentre repetida una o m谩s veces. A diferencia del asterisco, la expresi贸n "[a-zA-Z]\d+" encontrar谩 "H1" pero no encontrar谩 "H". Tambi茅n es posible utilizar este metacar谩cter en conjunto con el signo de interrogaci贸n para limitar hasta donde se efect煤a la repetici贸n.


Comentarios

Entradas populares de este blog

✔Sistema de ventas en Java con MySQL & SQL Server 馃洅

En este curso aprender谩s a crear un Sistema punto de ventas utilizando el lenguaje de programacion en Java donde empezaremos a desarrollar el sistema desde lo mas b谩sico asta implementar las buenas practicas con Java POO utilizando como gestores de besase de dato a MySQL y una base de datos de tipo SQL Server, dependiendo a tu preferencia y los datos de la base de datos se van a obtener usando la librer铆a Apache Commons DbUtils para obtener colecciones de datos de objetos   El sistema contara con las siguientes secciones Registros de clientes Registros de proveedores Creaci贸n del login Departamentos & Categor铆as Compra de productos Registros de productos Registros de cajas Ventas de productos Inventario de productos Reportes de productos Y el curso siempre se estar谩 actualizando con las sugerencias que me brinden los alumnos para el mejoramiento del sistema y poder ir desarrollando un buen Sistema punto de ventas profesional en Java puedes acceder al curso completo us

✔Sistema de ventas en C# con MySQL & SQL Server馃洅

En este curso aprender谩s a crear un Sistema punto de ventas en tres capas desde cero a profesional, utilizando el lenguaje de programacion en C# donde empezaremos a desarrollar el sistema desde lo mas b谩sico asta implementar las buenas practicas con C# POO utilizando como gestores de besase de dato a MySQL y una base de datos de tipo SQL Server, dependiendo a tu preferencia y los datos de la base de datos se van a obtener usando la librer铆a Linq2db para obtener colecciones de datos de objetos   El sistema contara con las siguientes secciones Registros de clientes Registros de proveedores Creaci贸n del login Departamentos & Categor铆as Compra de productos Registros de productos Registros de cajas Ventas de productos Inventario de productos Reportes de productos Y el curso siempre se estar谩 actualizando con las sugerencias que me brinden los alumnos para el mejoramiento del sistema y poder ir desarrollando un buen Sistema punto de ventas profesional en C# Cup贸n del curso

Leer archivos de Excel de tipo xlsx en Java

V铆deo del desarrollo de la aplicaci贸n  Descarga de los archivos jar 

Migrar datos de Excel a MySQL y MySQL a Excel en Java

Tres v铆deos donde aprender谩s a crear una aplicaci贸n en java para poder migrar datos de Excel a MySQL y  MySQL a Excel  MySQL a Excel Excel a MySQL Parte #1 Excel a MySQL Parte #2 Archivos JAR