Página 1 de 1

Capturar texto independiente de las mayúsculas

NotaPublicado: 2014-06-27 13:04 @586
por matadamas
Hola perleros.

Acudo a ustedes para exponer el siguiente problema que me ha dado vueltas la cabeza y no puedo encontrar la respuesta.

Requiero resaltar el texto encontrado en un string, independientemente de si tiene mayúsculas y minúsculas, pero que al final me respete el texto original.

Por ejemplo:

Tengo la frase: "Hola mundo"

Y quiero encontrar la palabra hola (con minúsculas), sin embargo, al utilizar las expresiones regulares me localiza la palabra con el modificador /i, pero me la sustituye con minúsculas.

Utilizo el siguiente código:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.    $frase='Hola mundo...Hola mundo...';
  2.    $palabra='hola';
  3.    $frase=~s/$palabra/\<span class='resaltado'\>$palabra\<\/span\>/gi;
  4.  
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Creo que debo de alguna manera encontrar el patrón y guardarlo desde la frase original para luego sustituirlo, pero no encuentro como.

Gracias.

Re: Capturar texto independiente de las mayúsculas

NotaPublicado: 2014-06-27 18:43 @821
por explorer
Bienvenido a los foros de Perl en Español, matadamas.

Efectivamente, fíjate que en la parte de sustitución, le estás diciendo que quieres que lo que encuentre lo sustituya por el contenido de $palabra, que es el "hola" escrito en minúsculas, por lo que siempre sale de esa manera.

Hay que indicarle que lo sustituya por lo que haya encontrado.

Entonces, en la parte del patrón de búsqueda, usamos los paréntesis para "capturar" lo que encontremos, y luego en la parte de sustitución lo recuperaremos, agregándole el <span>:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $frase = 'Hola mundo... hola mundo...';
  2.  
  3. $palabra = 'hola';
  4.  
  5. $frase =~ s{\b($palabra)\b}                             # si encontramos la $palabra, la capturamos
  6.            {<span class="resaltado">$1</span>}gi;       # y resaltamos lo capturado
  7.  
  8. print "$frase\n";       # <span class="resaltado">Hola</span> mundo... <span class="resaltado">hola</span> mundo...
  9.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Re: Capturar texto independiente de las mayúsculas

NotaPublicado: 2014-06-30 12:35 @566
por matadamas
Excelente solución, explorer.

Vaya que intentamos y lo único que encontramos fue el parámetro /i. Sin embargo, esta opción no la conocía.

Gracias
:D :D :D

Solo existen dos días en los que no puedes hacer nada al respecto... Ayer y mañana