• Publicidad

Duda urgente con caracteres reservados en regexp

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

Duda urgente con caracteres reservados en regexp

Notapor fgalves » 2007-11-20 08:50 @410

Hola a todos,

Tengo una duda que quizás podáis resolverme, y que me esta dando dolores de cabeza:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $outKey = &func();
        if (defined $outKey) {
        my @outList = qw(CLT DFF DFM);
        if (grep(/$outKey/,@outList )) {return 1;}
        }
        else {return 1;}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


El caso es que tengo este pequeño trozo de código.

En $outKey, recupero una cadena de caracteres determinada, la cual puede contener todo tipo de caracteres, incluso caracteres reservados para las regexp de Perl.

Lo que pretendo es verificar que dicha cadena de caracteres no está presente en la lista definida por @outList, para lo cual uso la instrucción "grep" de Perl.

El problema lo tengo cuando $outKey contiene caracteres reservados en Perl, como por ejemplo backslash (\), paréntesis (), ...

Por ejemplo, para el siguiente valor de $outKey: FQ)
obtuve el siguiente error durante la ejecución del grep: Unmatched ) in regex; marked by <-- HERE in m/FQ) <-- HERE / at ...

Para este otro siguiente valor de $outKey: FQ\
obtuve el siguiente error: Trailing \ in regex m/FQ\/ at ...

¿Alguien ve cómo modificar dicho código de manera que si en $outKey tengo caracteres reservados, pues que sean interpretados como caracteres normales de forma que el grep funcione correctamente?

¡¡Muchas gracias por vuestra ayuda!!
Saludos cordiales,
Felipe
fgalves
Perlero nuevo
Perlero nuevo
 
Mensajes: 210
Registrado: 2006-09-25 13:54 @621

Publicidad

Notapor explorer » 2007-11-20 09:28 @436

Prueba escapando toda la variable
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
grep ( /\Q$outKey\E/, @outList )
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

y nos lo dices, por fa...

(Sacado de perlre).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor fgalves » 2007-11-20 09:46 @448

¡¡¡Gracias Explorer!!!

Parece funcionar (al menos ya no tengo el error).
He mirado en el enlace y efectivamente, ¡parece ser lo que necesitaba!

¡¡¡Un gran saludo y muchísimas gracias!!!
Felipe
fgalves
Perlero nuevo
Perlero nuevo
 
Mensajes: 210
Registrado: 2006-09-25 13:54 @621

Notapor explorer » 2007-11-20 10:04 @461

Además de en perlre, \Q también está descrito en perlop, Quote and Quote-like Operators.

Lo que hace es "escapar" los caracteres no alfanuméricos hasta el próximo \E o fin de string.

Para asegurarte de que lo hace bien, prueba a imprimirlo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
print "\Q$outKey\E\n";
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: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor fgalves » 2007-11-20 10:55 @497

¡Absolutamente brillante! :)
fgalves
Perlero nuevo
Perlero nuevo
 
Mensajes: 210
Registrado: 2006-09-25 13:54 @621


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 2 invitados

cron