Expresion regular para reemplazar contenido con saltos de linea

En ampliación a mi anterior post sobre usar expresiones regulares para buscar y reemplazar código en Dreamweaver (y otros..) voy a resolver un caso algo mas complejo.

Imaginemos que tenemos que buscar algo como este contenido :

<div class="myDiv"> contenido </div>

En nuestro anterior post hay una solución sencilla para poder hacerlo y, por ejemplo, cambiar la etiqueta div por cualquier otra. Pero ¿que pasa cuando el contenido contiene saltos de linea? La anterior solución no sirve, y es aquí donde entra en juego el conjunto de caracteres ASCII

El problema reside en que si usamos una expresión regular del siguiente tipo, el punto (.) implica buscar cualquier caracter excepto un salto de línea.

<div class="myDiv">(.*)</div>

Una posible solución puede ser substituir el punto (.) por el conjunto de caracteres ASCII que representan un salto de linea [\x00-\x7F], de tal manera que la expresión quedaría así:

<div class="myDiv">([\x00-\x7F]*)</div>

Pero ¿que pasaría si tenemos un html como el siguiente?

<div class="myDiv"> contenido </div>
<div class="myDiv"> contenido </div>

En este supuesto caso, la expresión regular que hemos creado nos seleccionaria desde el principio del primer div hasta el final del segundo, con lo cual la selección no seria del todo correcta. Para solucionarlo, debemos hacer una pequeña modificación de tal manera que la selección sea minima en lugar de máxima. El resultado final sería :

<div class="myDiv">([\x00-\x7F]*?)</div>

De esta manera, conseguimos que la selección sea mas acotada y por tanto correcta.

No hay comentarios:

Publicar un comentario