• Publicidad

Reemplazar php con expresiones regulares dentro

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Reemplazar php con expresiones regulares dentro

Notapor LeoSevilla » 2016-12-08 06:34 @315

Hola, muy buenas.

He de hacer un reemplazo masivo en unos archivo php, los cuales tienen en su código expresiones regulares, de manera que se me complica y mucho. Pondré un ejemplo básico para ver si se puede hacer lo que quiero, y de ahí intentar abarcar el problema.

Tengo una variable dentro del php que es la que quiero cambiar:
Sintáxis: [ Descargar ] [ Ocultar ]
Using php Syntax Highlighting
  1. $regexp = '/<div>(.*?)<\/div>/';
  2.  
Coloreado en 0.018 segundos, usando GeSHi 1.0.8.4

y ha de quedar así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using php Syntax Highlighting
  1. $regexp = '/<div>
  2.          <h1>(.*?)<\/h1>
  3. <\/div>/';
  4.  
Coloreado en 0.009 segundos, usando GeSHi 1.0.8.4

Tiene que respetar el salto de lineas y caracteres en blanco.

Parto de este código, pero por mucho que hago pruebas no doy con la solución:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $viejo=<<EOF;
  2. $regexp = '/<div>(.*?)<\/div>/';
  3. EOF
  4.  
  5. my $nuevo=<<EOF;
  6. $regexp = '/<div>
  7.           <h1>(.*?)<\/h1>
  8. <\/div>/';
  9. EOF
  10.  
  11. my $resultado=~ s|$viejo|$nuevo|g;
  12.  
  13. print $resultado;
  14.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


He probado escapando caracteres, pero nunca consigo una salida. ¿Me ponen en el buen camino?

Salu2
LeoSevilla
Perlero nuevo
Perlero nuevo
 
Mensajes: 24
Registrado: 2011-11-19 15:24 @683

Publicidad

Re: Reemplazar php con expresiones regulares dentro

Notapor explorer » 2016-12-08 07:58 @374

La clave está en "escapar" el significado de los caracteres en el patrón de búsqueda.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use v5.14;
  3.  
  4. my $php = q(<php
  5. echo "Cosas horribles";
  6.  
  7. $regexp = '/<div>(.*?)<\/div>/';
  8.  
  9. >);
  10.  
  11. say $php;
  12.  
  13. my $viejo = q($regexp = '/<div>(.*?)<\/div>/';);
  14. my $nuevo = q($regexp = '/<div>
  15.    <h1>(.*?)<\/h1>
  16. <\/div>/';);
  17.  
  18. $php =~ s/\Q$viejo/$nuevo/g;
  19.  
  20. say $php;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Verás que es lo mismo que tienes, pero le he añadido una orden de escapado (\Q) al patrón de búsqueda.

Por otra parte, la parte de reemplazo creo que quedaría más bonita con esta versión, sin caracteres de nueva línea:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $nuevo = q($regexp = '/<div>\n    <h1>(.*?)<\/h1>\n<\/div>/';);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Prueba, y nos cuentas.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Reemplazar php con expresiones regulares dentro

Notapor LeoSevilla » 2016-12-08 12:52 @578

Fantástico, explorer, sabía que Perl era una buena solución :D Me ha servido, es lo que necesitaba.

Muchas gracias, salu2.
LeoSevilla
Perlero nuevo
Perlero nuevo
 
Mensajes: 24
Registrado: 2011-11-19 15:24 @683


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 6 invitados