Expresiones Regulares en .Net
Intentando desarrollar un parser, ya que veremos que parseamos
es imposible no caer en este tema de expresiones regulares, a menos de que nos fabriquemos una rutina que caracter a caracter vaya leyendo, almacenando en un buffer y comprobando si es lo que estamos buscando, podría ser una opción si es algo sencillo, pero…hgggssss.
O podemos ser los programadores duros y construirnos nuestra propia maquina de estados y con ella procesar las expresiones.Para los que no saben, o alguno que haya cursado conmigo Sintaxis y Semantica del Lenguaje y no se acuerda de los que nos hablaba el profe Bernal cuando nos hacía hacer la máquina de estados de una expresión regular dada, como aabbcc
y ver como corrían las letras de un estado al otro, pero bueno…supongo que ese fue el lado oscuro de las Regex ![]()
Una definición semi-formal: Una expresión regular es una cadena que describe o “matchea” a un conjunto de cadenas, dado un conjunto de reglas de sintaxis. En sintesis, es una cadena que representa a un patron que se busca en un texto. Un ejemplo más palpable, que por cierto los usamos a menudo, cuando queremos copiar archivos a un directorio: #cp *.cs /home/dario. Estamos aplicando el concepto. Esto en castellano seria como copiar todos los archivos (*) que tengan la extensión ‘cs’ a el directorio /home/dario. Es simple.
Las expresiones regulares funcionan de una manera similar. Tienen un conjunto finito de simbolos para la representación de caracteres, numeros, y como tambien simbolos para indicar cardinalidad.
Vayamos a un ejemplo: todos sabemos que una dirección IP se asemeja a: 10.66.43.141. Es decir, [numero 1-3 digitos][punto][numero 1-3 digitos][punto][numero 1-3 digitos][punto][numero 1-3 digitos]
Que mejor ejemplo para aplicar expresiones regulares. Aunque las diferencias se den, dependiendo del lenguaje que estamos trabajando, las expresiones regulares no varían mucho de una implementación a la otra. Por lo general todas las implementaciones se parecen bastante a la manera que lo hace Perl, cuyo motor de expresiones regulares es muy potente, mejor dicho, cuando te nombran Perl, lo primero que se me viene a la cabeza es RegEx, que ha tenido su inspiración en sed.Si programás en .Net y querés usar RegExs, The Regulator es ideal para armar las cadenas, probarlas y ver si funcionan como queremos, esta herramienta está hecha en .Net (dicho sea de paso).
Ejemplo: si queremos evaluar una expresión matemática para extraer sus operadores y operandos, y despues convertirla a postfija para su evaluación, primero debemos masajearla un poco.
Entonces, si tenemos una expresion como:
2.34m+344/444*(variable.value+33.55m+2^234)/2
La podríamos evaluar con la siguiente expresión regular, que usa el concepto de grupos, pero no es dificil de entender:
(?(?[d]+)u002e(?[d]+)m)| (?d+)| (?u0028|u0029|u002a|u002b|u002d|u002f|u005e)| u0022(?.+)u0022| (?[a-zA-Z0-9u002du002e]+)
donde:
- \d –> representa un decimal.
- [ ] –> uno, cualquiera de los caracteres dentro de los corchetes.
- (? ) –> se utiliza para hacer grupos.
- \u00xx –> representa un caracter unicode.
- . –> cualquier caracter, excepto el retorno de carro.
- | –> exclusión.
- a-z –> cualquier caracter entre a y z.

Gmane y NHibernate-Hispano
Si sos un desarrollador de Software, profesional o más bien novaton (en este caso más aún) es casi imposible que no estes participando de al menos alguna lista de Correos, y si te interesan muchos temas lo más probable es que estés suscripto a varias.Hace tiempo que participo en listas de correos, más activas en algunas que otras, y en algunas solamente en modo “listen and learning” (mmm…no sé por qué me acorde de bridges). Por lo tanto, tener una herramienta que gestione los correos y que te facilite la lectura, es importante.
Bloggeando encontré hace ya hace un tiempo un mailing list archives, que basicamente es un archivador grandote que centraliza información de cientos (y me quedo corto…miles) de listas de correo en un lugar común.
Dos muy usados son Gmane y The Mail Archive.
NHibernate-Hispano, que como una bolita de nieve está creciendo de a poquito, me deja muy contento ya que el grupo se está poniendo bueno y muchos están conformes con las cositas que se están posteando. Porque de pronto no entontrabas un bendito ejemplo de NHibernate en la web, y ahora con el Grupo por lo menos entrás y recorrés la bandeja de entrada, encontrás ejemplos o soluciones que quizás te pueden servir, e inclusive, hay para todos lo gustos y colores.
Decidí, para probar, inscribir a nuestro fabuloso grupo en estos archivadores de listas de mail y estas son las direcciones:
La que más me gusta es Gmane, tiene inclusive un gráfico que te muestra la actividad del grupo en los pasados días.
Gmane, para registrar los tracks del grupo, se infiltra en el mismo como si fuera un miembro más. De modo que todos los mails que se manden al grupo, se manden tambien a Gmane para que él los archive.También Gmane te permite revisar tus mails en una vista tipo blog, es decir, te permite ver tu lista como si fuera un super-extenso blog que hasta si querés, podés cambiar el estilo modificando el CSS.
Y como todo: “Es cuestión de gustos”. Porque sino, podés usar Gmail y listo! (que es lo que uso). Lo que no me puedo imaginar es: alguien participando en más de 5 listas de correos muy activas y usando la bandeja de entrada de Yahoo ó Hotmail; la verdad que creo que no debe ser muy cómodo. En fin, creo que Gmail se presta muy bien para esto, y las felicitaciones son para él, pero los aplausos…para Ajax, la verdad este conjunto de tecnologías metidas en una sola, se lleva todos los premios, y como viene la mano…es lo que se viene.