«

»

Dic 02

Utilizar expresión regular, guía para torpes de Dreamweaver sobre expresiones regulares

Como soy una persona muy torpe, cada vez que necesito utilizar una expresión regular de Dreamweaver me vuelvo loco. Las guías que hay por Internet son más bien para personas que les gusta el tema, pero como personalmente las odio, no quiero aprender como funcionan, sólo que me resuelvan el problema puntual que tengo cada muchos meses.

Así que si odias las expresiones regulares, aquí tienes algunos de mis apuntes por si te son de ayuda:

 

Tengo dos líneas de programación que pone:

if ($TextoB02<>$TextoC02) {$modif=”(CAMBIADO!)”;} else {$modif=””;}
$traduccion = $traduccion.”<TR><TD>”.$TextoA02.”</TD><TD>”.htmlspecialchars

Resulta que esta línea está repetida unas 300 veces, con un número que cambia, en este caso es “$TextoB02”, “$TextoC02”, “$TextoA02”, en la siguiente es lo mismo pero en lugar de “02” es “03” y así hasta el 300 y pico.

Como cambiarlo a mano es tedioso, hago lo siguiente:

En la casilla de búsqueda de Dreamweaver (CTRL+F), escribo en la casilla de arriba:

$traduccion = $traduccion.”<TR><TD>”.$TextoA([0-9]{2,3}).”</TD><TD>”.htmlspecialchars

Y en la de abajo:

if ($TextoB$1<>$TextoC$1) {$modif=”(CAMBIADO!)”;} else {$modif=””;}
$traduccion = $traduccion.”<TR><TD>”.$TextoA$1.”</TD><TD>”.htmlspecialchars

Activo la casilla que dice “Utilizar expresión regular” y le doy al botón “Reemplazar todo”.

 Vaya, no funciona! eso es porque utilizo caracteres raros como el “$” y tal, y hay que ponerles una barrita “\$”. Después del cambio definitivamente queda:

Casilla de arriba:

\$traduccion = \$traduccion.\”<TR><TD>\”.\$TextoA([0-9]{2,3}).\”<\/TD><TD>\”.htmlspecialchars

Casilla de abajo:

if ($TextoB$1<>$TextoC$1) {$modif=”(CAMBIADO!)”;} else {$modif=””;}
$traduccion = $traduccion.”<TR><TD>”.$TextoA$1.”</TD><TD>”.htmlspecialchars

 Ahora si ha funcionado. :)

 

Otro ejemplo:

Tenemos la línea:

if ($TextoB38<>$TextoC38) {$modif=”(CAMBIADO!)”;} else {$modif=”(NC)”;}
$traduccion = $traduccion.”<tr ><td>”.$TextoA38.”</td><td>”.$modif.htmlspecialchars($TextoB38).”</td></tr>”;

Y la queremos cambiar por:

if ($TextoB38<>$TextoC38) {$modif=”(CAMBIADO!)”;} else {$modif=”(NC)”;}
$traduccion = $traduccion.”<tr ><td>”.$TextoA38.”</td><td>”.$modif.htmlspecialchars($TextoB38).”</td></tr>”;

 

Pues en el recuadro de arriba del buscador pondremos:

\$TextoC([0-9]{2,3})\) \{\$modif=\”\(CAMBIADO!\)\”\;\}

Y en el de abajo

$TextoC$1) {$modif=”(CAMBIADO!)”.$TextoC$1.”<br />”;}

 

Y ahora un último ejemplo, tenemos un montón de líneas “case” como la siguiente:

case “114”: $estacio=”Rambla Just Oliveras L1|304|417″; break;

Y queremos cambiarla para que queden así:

case “Rambla Just Oliveras L1″: $estacioID=”114”; break;

Pués entonces hay que poner en el formulario de reemplazo de Dreamweaver lo siguiente. En la parte de arriba:

case “(.*)”: $estacio=”(.*)|(.*)|(.*)”; break;

pero para que no de errores con los carácteres comillas, $ y |, le ponemos la barra invertida delante, quedando así:

case \”(.*)\”: \$estacio=\”(.*)\|(.*)\|(.*)\”; break;

Y en la casilla de abajo lo siguiente:

case “$2″: $estacioID=”$1”; break;

Y ya podemos reemplazar.

RESUMEN DE ESTO ÚLTIMO (es lo mismo, pero creo que mejor explicado):

Tenemos:  case “114″: $estacio=”Rambla Just Oliveras L1|304|417″; break;
Queremos: case “Rambla Just Oliveras L1″: $estacioID=”114″; break;

Casilla de arriba:  case \”(.*)\”: \$estacio=\”(.*)\|(.*)\|(.*)\”; break;
(si ponemos case “(.*)”: $estacio=”(.*)|(.*)|(.*)”; break; dara errores porque con los carácteres comillas, $ y |, hay que poner una barra invertida delante)

Casilla de abajo:   case “$2″: $estacioID=”$1″; break;

 

 

Expresiones regulares con EditPad

Intento borrar todas las líneas, dejando sólo los dos o tres últimos caracteres de cada línea. Esto es útil para extraer los N últimos caracteres por diferentes motivos. Lo he hecho así:

Casilla de arriba:  (.{3})\s*$

Casilla de abajo:   ¬¬¬$1

 

Y luego hago un segundo paso:

Casilla de arriba:  (.*)¬¬¬(.*)

Casilla de abajo:   $2

 

Otra cosa que se puede hacer es borrar sólo el primer caracter de una cadena, o borra el último caracter de una cadena. Respectivamente se haría así:

Casilla de arriba:  ^.{0,3}

Casilla de abajo:   (dejarlo vacío)

 

o para borrar el caracter final:

Casilla de arriba:  .{0,3}$

Casilla de abajo:   (dejarlo vacío)

 

Ahora lo que quiero hacer es borrar todas las etiquetas HTML, de manera que si por ejemplo tengo “<h1><b>hola mundo</b></h1>” aparezca sólo “hola mundo”:

Casilla de arriba:  <[^>]*>

Casilla de abajo:   (dejarlo vacío)

Aunque que quede claro, si hay Javascript metido, en algunos casos excepcionales podría fallar, como por ejemplo si tienes “<script type=’text/javascript’>if(browserWidth<769){ // blablabla }</script>” esta expresión regular en lugar de limpiarlo todo, dejaría esta cadena “if(browserWidth”. ¿Y esto por qué? porqué en la comparación “browserWidth<769″ el símbolo “menor que” (<) provoca que la expresión regular falle. Por tanto, si la utilizas, sustituye primero los “<” y los “>” de las comparaciones en Javascript, y luego utiliza la expresión regular “<[^>]*>” y todo irá perfecto. :)

Artículos relacionados:

1 comentario

  1. Flynn

    Hay un pequeño error. Donde pone:

    Casilla de arriba: (.{3})\s*$
    Casilla de abajo: ¬¬¬$1

    Hay que poner si falla esto otro:
    Casilla de arriba: (.*)(.{3})\s*$
    Casilla de abajo: ¬¬¬$2

    Si lo que se quiere es quedarse con toda la palabra menos las dos últimas letras, se pone esto otro:
    Casilla de arriba: (.*)(.{3})\s*$
    Casilla de abajo: ¬¬¬$1

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Blue Captcha Image
Refrescar

*