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, solo 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.
O sea, que tengo esto:
$traduccion = $traduccion.»<TR><TD>».$TextoA02.»</TD><TD>».htmlspecialchars
$traduccion = $traduccion.»<TR><TD>».$TextoA03.»</TD><TD>».htmlspecialchars
$traduccion = $traduccion.»<TR><TD>».$TextoA04.»</TD><TD>».htmlspecialchars
Y quiero obtener esto:
if ($TextoB02<>$TextoC02) {$modif=»(CAMBIADO!)»;} else {$modif=»»;}
$traduccion = $traduccion.»<TR><TD>».$TextoA02.»</TD><TD>».htmlspecialchars
if ($TextoB03<>$TextoC03) {$modif=»(CAMBIADO!)»;} else {$modif=»»;}
$traduccion = $traduccion.»<TR><TD>».$TextoA03.»</TD><TD>».htmlspecialchars
if ($TextoB04<>$TextoC04) {$modif=»(CAMBIADO!)»;} else {$modif=»»;}
$traduccion = $traduccion.»<TR><TD>».$TextoA04.»</TD><TD>».htmlspecialchars
etc…
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».
¡Cuidado! si no te funciona es porque hay que «escapear» los caracteres especiales, como por ejemplo al caracter «$» hay que ponele una barra delante así: «\$».
Otro ejemplo:
Tenemos la línea:
if ($TextoB38<>$TextoC38) {$modif=»(CAMBIADO!)»;}
Y la queremos cambiar por:
if ($TextoB38<>$TextoC38) {$modif=»(CAMBIADO!)».$TextoC38;}
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: 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 solo 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 solo el primer caracter de una cadena.
Casilla de arriba: ^.{0,3}
Casilla de abajo: (dejarlo vacío)
Ahora queremos borrar el último carácter de una cadena (para borrar el caracter final):
Casilla de arriba: .{0,3}$
Casilla de abajo: (dejarlo vacío)
Otra parecida, queremos los tres primeros caracteres y borrar el resto:
Casilla de arriba: ^(.{3})\s*
Casilla de abajo: $1¬¬¬
Y luego hago un segundo paso:
Casilla de arriba: (.*)¬¬¬(.*)
Casilla de abajo: $2
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. :)
Ahora quiero borrar todas las líneas que tengan caracteres extraños, dejando sólo las líneas con letras normales (incluyendo ñ, ç, espacios, saltos de líneas y guiones). Por ejemplo si en una línea pone «El fútbol del Madrid es el mejor!!!» se borraría porque hay símbolos de exclamación (además de que la frase es mentira). Si pone «Caña con el futbol del Barça, el mejor equipo del mundo» la línea no se borraría. Jajaja lo del Madrid es broma, espero que los seguidores de este equipo no se me enfaden. ;) xD
(.*) = significa cualquier carácter.
^ = significa negación
(\r\n?|\n) = significa cualquier tipo de salto de línea (UNIX, Windows o Mac)
[ ]+ = significa que se repite un carácter.
Casilla de arriba: (.*)[^A-Za-z çñ-(\r\n?|\n)]+(.*)
Casilla de abajo: (dejarlo vacío)
Otro truco, cómo separar las letras de una cadena de texto (o líneas de texto) usando expresiones regulares:
En este caso, con el \n separo las letras y cada letra está en una línea diferente. Si se quiere separar las letras con espacios, sustituir el carácter \n con un espacio.
Casilla de arriba: (.{1})\s*
Casilla de abajo: \n$1
1 comentario
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