• Publicidad

Escapando caracteres en la expresión regular

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

Escapando caracteres en la expresión regular

Notapor BigBear » 2011-06-21 16:16 @719

Tengo este código donde puse la expresión regular bien hecha pero cuando la saco para usarla el script automáticamente le saca las barras y la expresión regular sale mal.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. @test  = ("\('hola'\)\/");
  2. $texto = "('hola')/";
  3.  
  4. for my $tes (@test) {
  5.     if ( $texto =~ /$tes/ ) {
  6.         print "yeah\n";
  7.     }
  8. }
  9.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


¿ Cuál es el error ?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Publicidad

Re: Escapando caracteres en la expresión regular

Notapor kidd » 2011-06-21 16:33 @731

El problema es que tienes que escapar los caracteres especiales dentro de tu expresión:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
if ( $texto =~ /\Q$tes\E/ ) {
...
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Re: Escapando caracteres en la expresión regular

Notapor explorer » 2011-06-21 16:45 @739

Aparte de lo indicado por kidd, no necesitas "escapar" los caracteres por adelantado (se te puede olvidar alguno, como es el caso de las comillas simples). Por eso, el uso de quotemeta() o de "\Q...\E" ahorra esas preocupaciones. Más información en perldoc -f quotemeta.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. my @test  = ("('hola')/");
  4. my $texto =  "('hola')/";
  5.  
  6. for my $tes (@test) {
  7.     my $patron = "\Q$tes\E";
  8.     print "Comprobando [$patron]\n";
  9.     if ( $texto =~ /$patron/ ) {      
  10.         print "yeah\n";
  11.     }
  12. }
  13.  
  14. __END__
  15. Comprobando [\(\'hola\'\)\/]
  16. yeah
  17.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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 19 invitados