propriétés exactes des balises Q E ?

Le
COP
Bonjour
J'utilise fréquemment ces balises dans mes regexp perl pour protéger mes
variables de l'interprétation de caractères spéciaux lors d'une évaluation.

Par exemple je souhaite trouver le pattern '* element1' dans la liste
('* element1' , '* element2', '* element3')

Je fais :

print "trouvé" if (grep /^Q$patternE$/, @$liste);


Mais il y une chose qui m'échappe :
Si les balises QE protègent l'interprétation du méta '*' (un peu comme
si on disposait de simples quotte à la place de ce balises), pourquoi ne
protège t'il pas de l'interpolation de la variable $pattern ?

Thx.

suivi sur fr.comp.lang.perl
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
Olivier Miakinen
Le #19677361
Le 01/07/2009 11:09, COP a écrit :

[...] il y une chose qui m'échappe :
Si les balises QE protègent l'interprétation du méta '*' (un peu comme
si on disposait de simples quotte à la place de ce balises), pourquoi ne
protège t'il pas de l'interpolation de la variable $pattern ?



Parce que ça a été spécifiquement défini comme ça ? C'est d'ailleurs
l'une des différences qu'il y a entre Perl et PCRE :

7. PCRE does support the Q...E escape for quoting substrings. Charac-
ters in between are treated as literals. This is slightly different
from Perl in that $ and @ are also handled as literals inside the
quotes. In Perl, they cause variable interpolation (but of course PCRE
does not have variables). Note the following examples:

Pattern PCRE matches Perl matches

Qabc$xyzE abc$xyz abc followed by the
contents of $xyz
Qabc$xyzE abc$xyz abc$xyz
QabcE$QxyzE abc$xyz abc$xyz

The Q...E sequence is recognized both inside and outside character
classes.



Je tente un résumé en français : PCRE reconnaît la séquence d'échap-
pement Q...E, les caractères entre les deux sont traités de façon
littérale (non interprétés). C'est légèrement différent de Perl, car
même $ et @ sont pris pour eux mêmes. Dans Perl, ils servent à lire
le contenu des variables. [Suivent trois exemples.] La séquence Q...E
est reconnue aussi bien à l'intérieur qu'à l'extérieur des classes de
caractères [...].

suivi sur fr.comp.lang.perl



Je propose un retour sur fr.comp.lang.regexp puisque je compare Perl
et PCRE. Ne pas hésiter à revenir sur fcl.perl en cas de réponse plus
spécifique à Perl.

--
Olivier Miakinen
Publicité
Poster une réponse
Anonyme