protéger une variable dans une regex

Le
kurtz_le_pirate
bonjour,

en me basant sur l'exemple trouvé ici
http://perl.enstimac.fr/DocFr/perlfaq6.html#comment%20prot%E9ger%20une%20variable%20pour%20l'utiliser%20dans%20une%20expression%20rationnelle,
j'ai fait ce petit bout de code :

my $regex=".*Disk Groups(.*?)(.*?)<.*";
while (<SOURCEFILE>) {
if (/Q$regex/) {
print "$1, $2";
}
}

les lignes à reconnaitre sont lues à partir d'un fichier xml et sont de
cette forme:
<objectname>Disk GroupsFATA Disk GroupDisk 009</objectname>


le 'Q' devrait permettre de ne pas interpréter les caractères spéciaux
dans la chaine.
mais j'ai droit a cette ereur :

Unrecognized escape D passed through at C:Perl_Scriptssaneva.pl line
17.
(la ligne 17 est my $regex=)

outre le fait que ma regex n'est peut être pas la bonne, il y a un truc
qui m'échappe :((


des pistes pour m'aider ?


--
klp
"bug : probleme d'interface entre la chaise et le clavier"
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Vincent Lefevre
Le #157011
Dans l'article kurtz_le_pirate
my $regex=".*Disk Groups(.*?)(.*?)<.*";


L'utilisation des backslashs est incorrecte et il vaut mieux utiliser
qr/.../.

my $regex = qr/.*\Disk Groups(.*?)(.*?)<.*/;

while (<SOURCEFILE>) {
if (/Q$regex/) {


if (/$regex/) {

print "$1, $2n";
}
}

les lignes à reconnaitre sont lues à partir d'un fichier xml et sont de
cette forme:
<objectname>Disk GroupsFATA Disk GroupDisk 009</objectname>



le 'Q' devrait permettre de ne pas interpréter les caractères spéciaux
dans la chaine.


Au contraire, tu *veux* les interpréter:

$ printf "foonf.*n" | perl -pe '$regex = qr/f.*/; s/$regex/bar/';
bar
bar
$ printf "foonf.*n" | perl -pe '$regex = "f.*"; s/Q$regexE/bar/';
foo
bar

--
Vincent Lefèvre 100% accessible validated (X)HTML - Blog: Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

Publicité
Poster une réponse
Anonyme