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.

Como siempre, la mejor forma de entenderlo es con un ejemplo práctico. Para ello parto de la expresión regular que me permitía encontrar todos elementos de tipo texto en un documento .php

<(div|h1|h2|h3|span) class='(title|subtitle|txt)'.*?>([\s\S]+?)</\1>

Y quiero sustituir todas las ocurrencias que encuentre por una cadena, pero no es una cadena fija, si no que quiero que se sutituya según los valores de los grupos de se encuentren, es decir, si encuentro

<div class='txt'>Texto de prueba</div>

lo quiero sustituir por

<div class='txt'><?php echo \$datos['txt'] ?></div>

y si encuentro

<h1 class='title'>Título de prueba</h1>

quiero sustituirlo por

<h1 class='title'><?php echo \$datos['title'] ?></h1>

Para conseguir ésto es tan fácil como definir en la cadena de sustitución, los parámetros correspondientes a los grupos de la expresión regular, quedando así

<$1 class='$2'><?php echo \$datos['$2'] ?></$1>

Fácil y muy potente … cuando ya lo conoces.

Anuncios
    • AngelFcM
    • 3/09/12

    Excenlente aporte amigo, muy bien entenido, un saludo, gracias.

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: