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 ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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 :
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
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>
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.
[...] 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.
</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.