Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

propriétés exactes des balises Q E ?

1 réponse
Avatar
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é\n" if (grep /^\Q$pattern\E$/, @$liste);


Mais il y une chose qui m'échappe :
Si les balises \Q\E 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

1 réponse

Avatar
Olivier Miakinen
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 :

<cit. http://www.pcre.org/pcre.txt&gt;
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.


</cit.>

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