Anuncios

Bienvenidos sean a este post, hoy hablaremos sobre RegExp que en realidad es la abreviatura para dos palabras en ingles, Regular Expressions, las cuales significan Expresiones Regulares, comencemos con el tema.

Anuncios

Las expresiones regulares es una secuencia de letras que forma un patron que usualmente es usada para busqueda y reemplazo, el proposito de esto es coincidir cadenas especificas asi el desarrollador pueda extraer caracteres basados en condiciones y reemplazar ciertos caracteres, a continuacion hablaremos sobre el objeto RegExp.

Anuncios

Este objeto nos ayuda a hacer coincidir el patron de cadenas y las propiedades y metodos de este objeto nos permite ayudar con expresiones regulares mas facilmente, veamos algunas de sus propiedades:

  • Pattern, se usa para definir a la expresion regular, se recomienda definirla antes de usar el objeto
  • IgnoreCase, una propiedad de tipo booleano que le dice si debe buscar todas las coincidencias o no, su valor predeterminado es false
  • Global, una propiedad de tipo booleano que setea si debe usar contra todas las posibles coincidencias en una cadena, su valor predeterminado es false
Anuncios

A continuacion veremos algunos de los metodos disponibles:

  • Test(busqueda), chequea si la busqueda que pasamos como argumento existe o no en la cadena, el dato que devuelve es de tipo booleano
  • Replace(busqueda, reemplazo), este toma 2 parametros primero busca el patron informado en busqueda y si lo encuentra lo reemplaza con el valor de reemplazo
  • Execute(busqueda), trabaja igual al anterior pero en lugar de reemplazar devuelve una coleccion conteniendo cada una de las coinicidencias
Anuncios

En el ultimo metodo al devolvernos un objeto de tipo coleccion conteniendo todas las coincidencias que encontro en forma de objeto tipo match, pero esta coleccion tiene propiedades para acceder a la informacion de ella, veamos algunas de ellas:

  • Count, devuelve la cantidad de elementos en la coleccion
  • Item, nos permite acceder a los elementos de la coleccion
Anuncios

Con esto podemos acceder a los objetos de tipo match que existen dentro de la coleccion pero estos objetos representan a los coinicidencias del patron que vimos antes, a continuacion tenemos algunas de las propieades del objeto match:

  • FirstIndex, representa la posicion dentro de la cadena original donde ocurrio la coincidencia
  • Length, devuelve el tamaño de la cadena encontrada
  • Value, devuelve el valor coincidido o el texto que coincidio,
Anuncios

Con esto ya hemos cubierto el objeto RegExp para nuestro siguiente paso hablaremos sobre los parametros del patron.

Anuncios

El patron se contruye de forma similar a como se hace en Perl, la construccion del patron es el tema mas importante mientras trabajemos con expresiones regulares, todo lo que veremos a continuacion seran las distintas formas de crear un patron dependiendo de nuestras necesidades.

Anuncios

Hablemos primero sobre la posicion coincidente, esto significa que nos aseguramos que ubicamos en el lugar correcto a las expresiones regulares, veamos la siguiente tabla:

SimboloDescripcion
^Coincide solo el comienzo de la cadena
$Coincide solo el final de la cadena
\bCoincide con cualquier limite de palabra
\BCoincide con cualquier limite que no sea de palabra
Posicion Coincidente
Anuncios

Para coincidir caracteres tales como alfabeto, numeros o caracteres especiales o incluso decimales o hexadecimales, a todos ellos los podemos tratar como literales y ahi entran en accion las coincidencias literales. Ya que pocos caracteres tienen un significado especial dentro del contexto de las expresiones regulares, para ello necesitamos escapar usando las siguientes secuencias de escape:

SimboloDescripcion
AlfanumericoCoinicide solo caracteres de letras y numeros
\nCoinicide el caracter de nueva linea
\[Coinicide solo al corchete
\]Coinicide solo al corchete
\(Coincide solo al parentesis
\)Coincide solo al parentesis
\tCoinicide al tab horizontal
\vCoincide al tab vertical
\|Coinicide solo al pleca
\{Coincide solo a la llave
\}Coincide solo a la llave
\\Coincide solo a la barra invertida
\?Coincide solo al signo de interrogacion
\*Coincide solo al asterisco
\+Coincide solo al signo mas
\.Coincide solo al punto
\bCoincide con cualquier limite de palabra
\BCoincide con cualquier limite que no sea de palabra
\fCoincide con el caracter de proxima pagina
\rCoincide con el caracter de retorno de carro
\xxxCoincide con el codigo ASCII en formato octal
\xddCoincide con el codigo ASCII en formato hexadecimal
\uxxxxCoincide con el codigo ASCII en formato unicode
Coincidencias Literales
Anuncios

Para nuestro siguiente paso hablaremos sobre las coincidencias de clases de caracteres, pero que son las clases de caracteres? Las clases de caracteres son el patron formado por el agrupamiento personalizado y encerrado entre corchetes, un detalle interesante de este tipo de coincidencias es la posibilidad de poder ignorar una clase de caracter que que no deberia estar en la lista y para eso usamos el simbolo negativo, en este caso es ^, veamos la siguiente tabla:

SimboloDescripcion
[xyz]Coincide cualquiera clase de caracteres dentro del conjunto de caracteres
[^xyz]Coincide cualquiera clase de caracteres que no estan dentro del conjunto de caracteres
\wCoincide cualquier clase de caracteres de palabras, equivale a [a-zA-Z_0.9]
\WCoincide cualquier clase de caracteres que no sean palabras, equvale a [^a-zA-Z_0-9]
\dCoincide con cualquier clase numerica, equivale a [0-9]
\DCoincide con cualquier clase no numerica, equivale a [^0-9]
\sCoincide cualquier clase de espacio, equivale a [ \t\r\n\v\f]
\SCoincide cualquier clase que no sea de espacio, equivale a [^ \t\r\n\v\f]
.Coinicde con cualquier clase de caracter, excepto \n
Coincidencias de clases de caracteres
Anuncios

Para nuestras siguientes coincidencias hablaremos sobre las coincidencias de repeticion, estas nos permiten multiples busquedas dentro de la expresion regular, incluso pueden especificar el numero de veces que un elemento se repite en una expresion regular, pasemos a ver la siguiente tabla:

SimboloDescripcion
*Coincide 0 o mas ocurrencias de la expresion regular informada, equivale a {0,}
+Coincide 1 o mas ocurrencias de la expresion regular informada, equivale a {1,}
?Coincide 0 o 1 ocurrencias de la expresion regular informada, equivale a {0,1}
{x}Coincide exactamente una x cantidad de ocurrencias de la expresion regular informada
{x,}Coincide al menos x o mas ocurrencias de la expresion regular informada
{x,y}Coincide de x a y ocurrencias de la expresion regular informada
Repeticion de coincidencias
Anuncios

Siguiendo con las coincidencias ahora hablaremos sobre alternacion y agrupamiento, estas permiten a los desarrolladores crear expresiones regulares mas complejas en particular para manejar clausulas intrincadas dentro de expresiones regulares las cuales dan un gran control y flexibilidad, veamos la siguiente tabla:

SimboloDescripcion
( )Sirve para agrupar clausulas, por ejemplo “(wyz)?(z)” crea una coincidencia de “xyz” o “z”
|Es para la alternacion y este combina una clausula de expresion regular y luego la coincide con cualquiera de las clausulas individuales, p.e “(ij)|(23)|(pq)” crea la coincidencia “ij” or “23” or “pq”
Alternacion y agrupamiento

Con esto vimos como los distintos tipos de coincidencias que podemos utilizar pero a continuacion analizaremos como se construye una expresion regular.

Anuncios

Para construir una expresion regular vamos a analizar unos ejemplos, veamos el primero:

"^\s*.." and "..\s*$"

Representa que puede haber cualquier cantidad de caracteres de espacio inicial y final en una sola línea, veamos el siguiente:

"((\$\s?)|(#\s?))?"

Representa un signo opcional $ o # seguido de un espacio opcional, veamos el ultimo:

"((\d+(\.(\d\d)?)?))"
Anuncios

Representa que al menos un dígito está presente seguido de decimales opcionales y dos dígitos después de decimales, con esto vimos como es una expresion regular pero ahora vamos a ponerlo en practica a traves de un ejemplo:

ExpReg.vbs

dim entrada

entrada = inputbox("Ingresa una direccion de correo", "Expresiones Regulares")

Set er = new RegExp

with er
	.Pattern = "^[\w-\.]{1,}\@([\da-zA-Z-]{1,}\.){1,}[\da-zA-Z-]{2,3}$"
	.IgnoreCase = False
	.Global = False
end with

if er.test(entrada) then
	msgbox entrada & " es un email valido"
else
	msgbox entrada & " no es un email valido"
end if

set er = nothing
Anuncios

Este es un codigo simple, primero declaramos la variable que vamos a usar, nuestro siguiente paso sera la solicitud de la direccion de email que verificaremos, despues crearemos el objeto llamado er del tipo RegExp, con el uso de with le agregamos a er todos los parametros que necesita, el primero va a ser el Pattern, luego IgnoreCase para que no ignore a las mayusculas ni minusculas y a global para que no busque todas las posibles coincidencias, analicemos el patron:

.Pattern = "^[\w-\.]{1,}\@([\da-zA-Z-]{1,}\.){1,}[\da-zA-Z-]{2,3}$"
Anuncios

Primero usamos el negador, luego le diremos que use los dos comodines para que verifique todos los caracteres pero como esta negado no lo hara, luego buscara la cantidad de coincidencias que debe buscar de la arroba, en este caso una sola vez, buscar cualquier clase numerica y los distintos tipos de letra, despues repetiremos lo del arroba (@) con un punto para una coincidencia, es decir que chequearemos que lo ingresado en entrada tenga un formato valido como: un valor antes de la arroba, seguido de un valor despues de la arroba con un punto y otro valor, es decir que tenga un fomato que realmente coincida con la vida real, despues tendremos un condicional donde por medio de Test verificamos a entrada y si cumple con las coincidencias del patron mostrara un mensaje de que es valido de lo contrario mostrara un mensaje de que no es valido, por ultimo eliminamos de memoria el objeto que creamos, vamos a chequear el funcionamiento con el siguiente video

En el video podemos ver como funcion de manera perfecta porque ante todas las pruebas que hicimos, la unica que funciono realmente fue la primera con una direccion de email valida, el resto fueron direcciones no validas.

Anuncios

En resumen, hoy hemos visto expresiones regulares, hemos visto como son, como estan compuestas, los distintos tipos de coincidencia, como construir las expresiones regulares con las coincidencias vistas anteriormente, y hemos hecho un ejemplo que nos permite identificar de manera perfecta una direccion de email, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes comprar mi libro sobre VBscript en Amazon

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00