Página 1 de 1

Reemplazar php con expresiones regulares dentro

NotaPublicado: 2016-12-08 06:34 @315
por LeoSevilla
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.022 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.016 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.003 segundos, usando GeSHi 1.0.8.4


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

Salu2

Re: Reemplazar php con expresiones regulares dentro

NotaPublicado: 2016-12-08 07:58 @374
por explorer
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.002 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.

Re: Reemplazar php con expresiones regulares dentro

NotaPublicado: 2016-12-08 12:52 @578
por LeoSevilla
Fantástico, explorer, sabía que Perl era una buena solución :D Me ha servido, es lo que necesitaba.

Muchas gracias, salu2.