Backreference en expresiones regulares (y II)

Esta segunda parte viene a explicar cómo realizar reemplazos en expresiones regulares mediante backreference, es decir, a partir de las coincidencias de esa expresión regular.

Como ya se explicó en otro post, para realizar reemplazos en java con expresiones regulares se utiliza la función appendReplacement(StringBuffer sb, String replacement) de la clase Matcher. Si dentro de la cadena de reemplazo se establece algún $n, éste será automáticamente sustituido por el valor del grupo correspondiente.

Sigue leyendo

Backreference en expresiones regulares (I)

Estos días me ha tocado pelearme con algo que desconocía completamente en expresiones regulares y que me ha parecido muy interesante, además de ayudarme enormemente. Se trata del backreference, o de cómo hacer referencia a elementos de la expresión regular dentro de la propia expresión regular o dentro de un remplazo con expresiones regulares.

Si en el contenido de una expresión regular se pone \n, se sustituirá automáticamente por el valor del grupo correspondiente, pudiendo tener así “variables” dentro de una expresión regular.

Sigue leyendo

Expresión regular para obtener todo

¡Menuda tontería! Se estará diciendo más de uno, pero si eso es muy sencillo. Pues sí, pero aún he tardado un rato para llegar a conseguir lo que quería. Mi objetivo era obtener absolutamente todos los caracteres que contiene una etiqueta dentro de un documento PHP, caracteres, espacios, saltos de línea, tabuladores, caracteres especiales, … !TODO¡

El caso es que esta expresión regular forma parte de un programa que parsea documentos PHP


<.+?>([\s\S]+?)</.+?>

Con esta expresión regular, el grupo 1 obtendrá todo lo que contenga una etiqueta y a mi me solucionará todo.

Reflexión en Java

La reflexión es la capacidad que tiene un programa para conocer su estructura de alto nivel. Se puede saber a partir de una clase ya compilada todos sus métodos, propiedades, instanciarla, ejecutar sus métodos,…

Cuando el código fuente de un programa se compila, pierde la información sobre la estructura del programa conforme se genera el código de bajo nivel. La reflexión nos permite, en tiempo de ejecución, volver a conocer la estructura de alto nivel.

En Java, el API Relection es quien nos proporciona todo lo que necesitamos.

Mediante el método estático  forName(String) de la clase Class se puede crear el molde de una clase a través de su nombre.


Class myClass = Class.forName("className");

Y mediante el método getInstance() se crea un objeto de esa clase. A partir de este momento ya se puede acceder a las propiedades y métodos de esa clase.


myClass.getInstance();

Y ya, con sólo esto, la potencia y las posibilidades se disparan.

Sigue leyendo

Update a partir de un Select

Hoy en el trabajo se planteó una duda a la que nadie sabía dar respuesta, pero a la que después de un rato encontramos solución. Cómo realizar un Update a partir de los resultados de un Select. Un Update utilizando un Select dentro del Where, ya lo había hecho muchas veces y no tiene ninguna ciencia, pero que los propios resultado del Select fueran los que se establecieran en el set del Update ….. ya es otra historia.

La solución


update table1 t1, (select creation_date from table2) t2 set t1.creation_date = t2.creation_date;

Se entiende, ¿no? Se le establece al campo creation_date de table1 los valores del campo creation_date de table2. La potencia de esta forma de realizar Update, que yo desconocía hasta hoy, es inmensa.

Ordenaciones en MySQL

Pongamos que tenemos un campo en base de datos de tipo texto en el cuál guardamos datos de varios tipos, números, fechas, etc. y queremos hacer listados ordenados con este campo. Con las cadenas no hay ningún problema ya que con la sentencia order by se pueden realizar ordenaciones fácilmente, el problema surge cuando queremos ordenar otro tipo de datos. Imaginemos que en el campo de texto tenemos guardados una serie de números y realizamos un listado ordenado con order by.


> select * from my_table order by value;

el resultado sería


> 10, 15, 20, 25, 5

Sigue leyendo

XML

XML, siglas en inglés de eXtensive Markup Language, es un metalenguaje extensible de etiquetas desarrollado por el Worl Wide Web Consortium (W3C).

Los documentos XML tienen muchísimas utilidades, pero en mi caso, los he utilizado y utilizo para dos muy concretas:

  • comunicación entre una aplicación clinte y un servidor. En est caso creamos una API basada en ficheros XML.
  • ficheros de confiuración de aplicaciones.

Ficheros XML en Java

Para trabajar con ficheros XML en Java existen dos API’s que son SAX y DOM.

Yo no he trabajado con SAX por una sóla razón, no permite modificar un fichero XML, cosa que DOM sí hace y que para mi es necesario. Además la progrmación es bastante más sencila en el caso de DOM. Como contrapartida, DOM consume más memoria porque carga todo el fichero en memoria y SAX no.

Con todos estos puntos sobre la mesa, yo me quedo con DOM. Esta API carga el contenido del docmento XML en un Document a partir del cuál se obtiene toda la información.

Sigue leyendo