• Publicidad

Cómo consigo reemplazar esta string

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

Cómo consigo reemplazar esta string

Notapor rithchard » 2011-08-22 23:52 @036

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. # Como reemplazo esta string
  2.  
  3. $str = '34% es el total, y 4%<img alt="" src="Presentaci%C3%B3n_de_un_caf%C3%A9.jpg"><br>blabla de 10%';
  4.  
  5. # Quiero que el código anterior me quede algo así:
  6. # 34% es el total, y 4%<img alt="" src="Presentaci@C3@B3n_de_un_caf@[email protected]"><br>blabla de 10%
  7.  
  8. # solo quisiera modificar el "%" por "@", pero solo dentro de las etiquetas "<img >" lo demás que lo deje intacto
  9.  
  10. # Saludos.
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
rithchard
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2010-04-19 11:59 @540

Publicidad

Re: Cómo consigo reemplazar esta string

Notapor explorer » 2011-08-23 06:30 @312

Esta es una manera:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. while ($str =~ s/<img [^>]+? \K %/@/gix) { 1 }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Con la ayuda de '/g' y del while(), realizamos una serie de sustituciones, cada una de las cuales intenta buscar el carácter '%' precedido por una serie de caracteres que están dentro de las marcas, pero que no nos importan cuáles son (\K).

Esta es otra forma, sin utilizar while():

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $str =~ s{<img \K ([^>]+)}{my $x = $1; $x =~ y/%/@/; $x}geix;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

El truco está en que primero localizamos lo que nos interesa, lo capturamos en $1 y luego ejecutamos un proceso de transliteración entre los caracteres '%' y '@'. El resultado sustituye a lo encontrado antes. Y esto se repite (/g) para el resto de marcas <img> del $str. (Esta segunda forma es mucho más eficiente.)
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


Volver a Básico

¿Quién está conectado?

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

cron