Página 1 de 1

Substituir apariciones entre determinados strings

NotaPublicado: 2014-02-21 13:18 @596
por jor73
Necesito substituir todas las apariciones de texto entre <b> y </b> de un html por su correspondiente hipervínculo.

Por ejemplo,
Sintáxis: [ Descargar ] [ Ocultar ]
Using html4strict Syntax Highlighting
  1. <b>pepito<b><b>fulanito</b>
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
por
Sintáxis: [ Descargar ] [ Ocultar ]
Using html4strict Syntax Highlighting
  1. <b><a href="http://www.pepito.com">pepito</a><b><b><a href="http://www.fulanito.com">fulanito</a></b>
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
y quería saber si se puede hacer con un solo s//g.

Tampoco tengo claro si le pongo que coja lo que hay entre <b> y </b> que no me vaya a coger el primer <b> con el último </b>.

¿Alguna idea de cómo hacerlo?

¡Gracias!

Re: Substituir apariciones entre determinados strings

NotaPublicado: 2014-02-21 14:43 @655
por explorer
Bienvenido a los foros de Perl en Español, jor73.

Esta es una forma de hacerlo.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $html = '<b>pepito</b><b>fulanito</b>';
  2.  
  3. $html =~ s{<b>(.*?)</b>}
  4.           {<b><a href="http://www.$1.com">$1</a></b>}g;
  5.  
  6. print "$html\n";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Re: Substituir apariciones entre determinados strings

NotaPublicado: 2014-02-24 10:40 @486
por jor73
¡Muchas gracias!

Faltaría solamente poner $1 en lugar de pepito en la línea 4.

El '?' hace que coja el patrón más corto, ¿no?

Saludos,
Jor

Re: Substituir apariciones entre determinados strings

NotaPublicado: 2014-02-24 11:43 @530
por explorer
Arreglado :)

Sí, el '?' se refiere a que queremos que coincida el patrón con el menor número posible de caracteres, antes de llegar a '</b>'.

De esta manera, evitamos que el comodín '.*' se "coma" todos los caracteres del archivo, hasta el final. Queremos que vaya poco a poco.