Escolar Documentos
Profissional Documentos
Cultura Documentos
Una expresin regular, a menudo llamada tambin regex, es una secuencia de caracteres
que forma un patrn de bsqueda, principalmente utilizada para la bsqueda de patrones de
cadenas de caracteres u operaciones de sustituciones. Por ejemplo, el grupo formado por las
cadenasHandel, Hndel y Haendel se describe con el patrn "H(a||ae)ndel". La mayora de
las formalizaciones proporcionan los siguientes constructores: una expresin regular es una
forma de representar a los lenguajes regulares (finitos o infinitos) y se construye
utilizando caracteres del alfabeto sobre el cual se define el lenguaje.
En informtica, las expresiones regulares proveen una manera muy flexible de buscar o
reconocer cadenas de texto.
*
El asterisco indica que el carcter que le precede puede aparecer cero, una, o ms veces. Por
ejemplo, "0*42" se corresponde con 42, 042,0042, 00042, etctera.
Agrupacin
Los parntesis pueden usarse para definir el mbito y precedencia de los dems
operadores. Por ejemplo, "(p|m)adre" es lo mismo que "padre|madre", y "(des)?amor"
se corresponde con amor y con desamor.
Los constructores pueden combinarse libremente dentro de la misma expresin, por lo
que "H(ae?|)ndel" equivale a "H(a|ae|)ndel".
La sintaxis precisa de las expresiones regulares cambia segn las herramientas y
aplicaciones consideradas, y se describe con ms detalle a continuacin.
Su utilidad ms obvia es la de describir un conjunto de cadenas, lo que resulta de utilidad
en editores de texto y aplicaciones para buscar y manipular textos. Muchos lenguajes de
programacin admiten el uso de expresiones regulares con este fin. Por
ejemplo, Perl tiene un potente motor de expresiones regulares directamente incluido en su
sintaxis. Las herramientas proporcionadas por las distribuciones de Unix (incluyendo el
editor sed y el filtro grep) fueron las primeras en popularizar el concepto de expresin
regular.
Aplicaciones[editar]
Numerosos editores de texto y otras utilidades utilizan expresiones regulares para buscar
y reemplazar patrones en un texto.
Para poder utilizar las expresiones regulares al programar es necesario tener acceso
a un motor de bsqueda con la capacidad de utilizarlas. Es posible clasificar los
motores disponibles en dos tipos: Motores para el programador y Motores para el
usuario final.
Motores para el usuario final: son programas que permiten realizar bsquedas
sobre el contenido de un archivo o sobre un texto extrado y colocado en el programa.
Estn diseados para permitir al usuario realizar bsquedas avanzadas usando este
mecanismo, sin embargo es necesario aprender a redactar expresiones regulares
adecuadas para poder utilizarlos eficientemente. Estos son algunos de los programas
disponibles:
AWK: Forma una parte esencial del lenguaje y por extensin de la herramienta
awk de Unix/Linux
Java: existen varias bibliotecas hechas para java que permiten el uso de RegEx, y
Sun planea dar soporte a estas desde el SDK
PCRE: biblioteca de ExReg para C, C++ y otros lenguajes que puedan utilizar
bibliotecas dll (Visual Basic 6 por ejemplo).
El punto "."[editar]
El punto se interpreta por el motor de bsqueda como "cualquier carcter", es decir,
busca cualquier carcter SIN incluir los saltos de lnea. Los motores de Expresiones
regulares tienen una opcin de configuracin que permite modificar este
comportamiento. En .Net Framework se utiliza la opcin RegexOptions.Singleline para
especificar la opcin de que busque todos los caracteres incluidos el salto de lnea
(\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 gtica puerta de getisboro goot" el motor de
bsqueda encontrar "gat", "gt" y por ltimo "get". Ntese que el motor de bsqueda
no encuentra "goot"; esto es porque el punto representa un solo carcter y
nicamente uno. Si es necesario que el motor encuentre tambin la expresin "goot",
ser necesario utilizar repeticiones, las cuales se explican ms adelante.
Aunque el punto es muy til para encontrar caracteres que no conocemos, es
necesario recordar que corresponde a cualquier carcter y que muchas veces esto no
es lo que se requiere. Es muy diferente buscar cualquier carcter que buscar
cualquier carcter alfanumrico o cualquier dgito o cualquier no-dgito o cualquier no-
La admiracin "!"[editar]
Se utiliza para realizar una "bsqueda anticipada negativa". La construcin de la
expresin regular es con el par de parntesis, el parntesis de apertura seguida de un
signo de interrogacin y un signo de exclamacin. Dentro de la bsqueda tenemos la
expresin regular. Por ejemplo, para excluir exactamente una palabra, habr que
utilizar "^(palabra.+|(?!palabra).*)$"
\t Representa un tabulador.
\n Representa la "nueva lnea" el carcter por medio del cual una lnea da
inicio. Es necesario recordar que en Windows es necesaria una combinacin de
\r\n para comenzar una nueva lnea, mientras que en Unix solamente se usa \n y
en Mac_OS clsico se usa solamente \r.
Notas:
La barra "|"[editar]
Sirve para indicar una de varias opciones. Por ejemplo, la expresin regular "a|e"
encontrar cualquier "a" o "e" dentro del texto. La expresin regular "este|oeste|norte|
sur" permitir encontrar cualquiera de los nombres de los puntos cardinales. La barra
se utiliza comnmente en conjunto con otros caracteres especiales.
Utilizados en conjunto con la barra "|" permite hacer bsquedas opcionales. Por
ejemplo la expresin regular "al (este|oeste|norte|sur) de" permite buscar textos
que den indicaciones por medio de puntos cardinales, mientras que la expresin
regular "este|oeste|norte|sur" encontrara "este" en la palabra "esteban", no
pudiendo cumplir con este propsito.
10
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
repeticin es variable. En estos casos los siguientes metacaracteres son tiles.
El asterisco "*"[editar]
El asterisco sirve para encontrar algo que se encuentra repetido 0 o ms veces. Por
ejemplo, utilizando la expresin "[a-zA-Z]\d*" ser posible encontrar tanto "H" como
"H1", "H01", "H100" y "H1000", es decir, una letra seguida de un nmero indefinido de
dgitos. Es necesario tener cuidado con el comportamiento del asterisco, ya que ste,
por defecto, trata de encontrar la mayor cantidad posible de caracteres que
correspondan con el patrn que se busca. De esta forma si se utiliza "\(.*\)" para
encontrar cualquier cadena que se encuentre entre parntesis y se lo aplica sobre el
texto "Ver (Fig. 1) y (Fig. 2)" se esperara que el motor de bsqueda encuentre los
textos "(Fig. 1)" y "(Fig. 2)", sin embargo, debido a esta caracterstica, en su lugar
encontrar el texto "(Fig. 1) y (Fig. 2)". Esto sucede porque el asterisco le dice al
motor de bsqueda que llene todos los espacios posibles entre los dos parntesis.
Para obtener el resultado deseado se debe utilizar el asterisco en conjunto con el
11
Grupos annimos[editar]
Los grupos annimos se establecen cada vez que se encierra una expresin regular
en parntesis, por lo que la expresin "<([a-zA-Z]\w*?)>" define un grupo annimo. El
motor de bsqueda almacenar una referencia al grupo annimo que corresponda a
la expresin encerrada entre los parntesis.
La forma ms inmediata de utilizar los grupos que se definen, es dentro de la misma
expresin regular, lo cual se realiza utilizando la barra inversa "\" seguida del nmero
del grupo al que se desea hacer referencia de la siguiente forma: "<([a-zA-Z]\w*?)>.*?
</\1>" Esta expresin regular encontrar tanto la cadena "<font>Esta</font>" como la
cadena "<b>prueba</b>" en el texto "<font>Esta</font> es una <b>prueba</b>" a
pesar de que la expresin no contiene los literales "font" y "B".
Otra forma de utilizar los grupos es en el lenguaje de programacin que se est
utilizando. Cada lenguaje tiene una forma distinta de acceder a los grupos. Los
ejemplos enumerados a continuacin utilizan las clases del .Net Framework, usando
la sintxis de C# (la cual puede fcilmente adaptarse a VB .Net o cualquier otro
lenguaje del Framework o incluso Java o JavaScript).
Para utilizar el motor de bsqueda del .Net Framework es necesario en primer lugar
hacer referencia al espacio de nombres System.Text.RegularExpressions. Luego es
necesario declarar una instancia de la clase Regex de la siguiente forma:
Regex _TagParser = new Regex("<([a-zA-Z]\w*?)>");
Luego asumiendo que el texto que se desea examinar con la expresin regular se
encuentra en la variable "sText" podemos recorrer todas las instancias encontradas de
la siguiente forma:
12
13
14
La tabla que figura a continuacin enumera las expresiones regulares que pueden utilizarse para
crear un diccionario para un idioma personalizado.
Nombre del
Smbolo convencional de la
elemento
expresin regular
Cualquier carcter .
Carcter de grupo []
prohbe "yeso"
[^]
O
0 o ms
coincidencias
1 o ms
coincidencias
Letra o dgito
1000, etc.
10+ permite los nmeros 10, 100,
[0-9a-zA-Z--]
15
carcter nico
[0-9a-zA-Z--]+ permite cualquier
palabra
Letra latina
mayscula
Letra latina
minscula
Letra cirlica
mayscula
Letra cirlica
minscula
Dgito
[A-Z]
[a-z]
[-]
[-]
[0-9]
@
Reservado.
Nota:
1.
Para utilizar un smbolo de expresin regular como un carcter normal, coloque delante
una barra invertida. Por ejemplo, [t-v]x+ significa tx, txx, txx, etc., ux, uxx, etc., pero \[t-v\]x+
significa [t-v]x, [t-v]xx, [t-v]xxx, etc.
2.
Para agrupar elementos de expresiones regulares, utilice parntesis. Por ejemplo, (a|b)
+|c significa c o cualquier combinacin del tipo abbbaaabbb, ababab, etc. (cualquier palabra de
longitud distinta de cero en la que puede haber cualquier combinacin de aes y bes en cualquier
orden), mientras que a|b+|c significa a, c y b, bb, bbb, etc.
Ejemplos
Suponga que est reconociendo una tabla con tres columnas: fechas de nacimiento, nombres y
direcciones de correo electrnico. En este caso, puede crear dos nuevos idiomas: Datos y
Direccin, y definir las siguientes expresiones regulares para estos.
Expresin regular para fechas:
El nmero que denota un da puede constar de un dgito (1, 2, etc.) o de dos dgitos (02, 12),
pero no puede ser cero (00 0). Por lo tanto, la expresin regular correspondiente al da debe
tener el siguiente aspecto: ((|0)[1-9])|([1|2][0-9])|(30)|(31).
La expresin regular correspondiente al mes debe tener el siguiente aspecto: ((|0)[1-9])|(10)|
(11)|(12).
La expresin regular correspondiente al ao debe tener el siguiente aspecto: ([19][0-9][0-9]|
([0-9][0-9])|([20][0-9][0-9]|([0-9][0-9]).
Ahora lo nico que necesitamos es combinar todo esto y separar los nmeros mediante un punto
(por ejemplo, 1.03.1999). El punto es un smbolo de expresin regular, por lo que debe colocar
16
una barra invertida (\) que lo anteceda. La expresin regular de la fecha ntegra debe tener el
siguiente aspecto:
((|0)[1-9])|([1|2][0-9])|(30)|(31)\.((|0)[1-9])|(10)|(11)|(12)\.((19)[0-9][0-9])|([0-9][0-9])|
([20][0-9][0-9]|([0-9][0-9])
Expresin regular para las direcciones de correo electrnico:
[a-zA-Z0-9_\-\.]+\@[a-z0-9\.\-]+
Adems de indicar qu caracteres queremos permitir podemos seleccionar cuantas veces deben
aparecer. Si no aadimos nada que indique lo contrario se asume que el carcter debe aparecer
una vez, pero podramos pedir que el carcter aparezca un nmero distinto de veces:
17