mirror of
https://github.com/php/doc-fr.git
synced 2026-03-24 07:02:06 +01:00
165 lines
6.4 KiB
XML
165 lines
6.4 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision$ -->
|
|
<!-- EN-Revision: 96c9d88bad9a7d7d44bfb7f26c226df7ee9ddf26 Maintainer: yannick Status: ready -->
|
|
<!-- Reviewed: no -->
|
|
|
|
<article xml:id="reference.pcre.pattern.differences" xmlns="http://docbook.org/ns/docbook">
|
|
<title>Différences avec Perl</title>
|
|
<titleabbrev>Différences avec Perl</titleabbrev>
|
|
<para>
|
|
Les différences avec Perl 5.005 sont présentées ici :
|
|
<orderedlist>
|
|
<listitem>
|
|
<simpara>
|
|
Par défaut, un caractère d'espacement correspond à
|
|
n'importe quel caractère que la fonction C <literal>isspace()</literal> reconnaît,
|
|
bien qu'il soit possible de recompiler la bibliothèque PCRE avec
|
|
d'autres tables de caractères. Normalement, <literal>isspace()</literal> retourne
|
|
&true; pour les espaces, les retours chariot, les
|
|
nouvelles lignes, les formfeed, les tabulations verticales et horizontales.
|
|
Perl 5 n'accepte plus la tabulation verticale comme caractère
|
|
d'espacement. La séquence \v qui était dans la documentation
|
|
Perl depuis longtemps n'a jamais été reconnue. Cependant, la
|
|
tabulation verticale elle-même était reconnue comme un
|
|
caractère d'espacement jusqu'à la version 5.002. Avec les
|
|
versions 5.004 et 5.005, l'option \s l'ignore.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
PCRE ne tolère pas la répétition de quantificateurs
|
|
dans les expressions. Perl le permet, mais cela ne signifie pas ce qu'il serait possible de
|
|
penser. Par exemple, (?!a){3} ne s'interprète pas : les trois
|
|
caractères suivants ne sont pas des "a". En fait, cela
|
|
s'interprète comme : le caractère suivant n'est pas "a" trois fois.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Les occurrences de sous-masques qui interviennent dans des assertions
|
|
négatives sont comptées, mais elles ne sont pas
|
|
enregistrées dans le vecteur d'occurrences. Perl modifie ses
|
|
variables numériques pour toutes les occurrences de sous-masque,
|
|
avant que l'assertion ne vérifie le masque entier, et uniquement si
|
|
les sous-masques ne trouvent qu'une seule occurrence.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Bien que les caractères nul soient tolérés dans la
|
|
chaîne de recherche, ils ne sont pas acceptés dans le
|
|
masque, car le masque est utilisé comme une chaîne C
|
|
standard, terminée par le caractère nul. Il faut donc
|
|
utiliser la séquence d'échappement "\x00" dans le masque
|
|
pour rechercher les caractères nul.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Les séquences d'échappement suivantes ne sont pas
|
|
supportées par Perl : \l, \u, \L, \U.
|
|
En fait, elles sont implémentées par la gestion
|
|
intrinsèque de chaînes Perl, et ne font pas partie
|
|
de ses caractères spéciaux.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
L'assertion \G du Perl n'est pas supportée car elle n'est pas
|
|
pertinente pour faire des recherches avec des masques uniques.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
De manière assez évidente, PCRE n'accepte pas la
|
|
construction <literal>(?{code})</literal> et <literal>(??{code})</literal>.
|
|
Cependant, les masques récursifs sont supportés.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Au moment de l'écriture de PCRE, Perl 5.005_02 avait quelques
|
|
comportements étranges avec la capture des chaînes
|
|
lorsqu'une partie du masque est redoublée. Par exemple, "aba" avec
|
|
le masque /^(a(b)?)+$/ va affecter à $2 la valeur "b", mais la
|
|
même manipulation avec "aabbaa" et /^(aa(bb)?)+$/ laissera $2 vide.
|
|
Cependant, si le masque est remplacé par /^(aa(b(b))?)+$/ alors $2
|
|
(et d'ailleurs $3) seront correctement affectés. Avec le Perl
|
|
5.004, $2 sera correctement affecté dans les deux cas, et c'est
|
|
aussi vrai avec PCRE. Si Perl évolue vers un autre comportement
|
|
cohérent, PCRE s'adaptera probablement.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Une autre différence encore non résolue est le fait qu'en
|
|
Perl 5.005_02 le masque /^(a)?(?(1)a|b)+$/ accepte la chaîne "a",
|
|
tandis que PCRE ne l'accepte pas. Cependant, que ce soit avec Perl ou
|
|
PCRE /^(a)?a/ et "a" laisseront $1 vide.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
PCRE propose quelques extensions aux expressions régulières du Perl.
|
|
<orderedlist>
|
|
<listitem>
|
|
<simpara>
|
|
(a) Bien que les assertions arrières (<literal>lookbehind</literal>) soient obligées
|
|
de rechercher une chaîne de longueur fixe, toutes les assertions
|
|
arrières peuvent avoir une longueur différente. Perl 5.005 leur
|
|
impose d'avoir toutes la même longueur.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
(b) Si <link linkend="reference.pcre.pattern.modifiers">PCRE_DOLLAR_ENDONLY</link> est
|
|
activé, et que <link linkend="reference.pcre.pattern.modifiers">PCRE_MULTILINE</link>
|
|
ne l'est pas, le métacaractère <literal>$</literal> ne s'applique qu'à
|
|
la fin physique de la chaîne, et non pas avant les caractères
|
|
de nouvelle ligne.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
(c) Si <link linkend="reference.pcre.pattern.modifiers">PCRE_EXTRA</link> est
|
|
activé, un antislash suivi d'une lettre sans signification
|
|
spéciale est considéré comme une erreur.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
(d) Si <link linkend="reference.pcre.pattern.modifiers">PCRE_UNGREEDY</link> est
|
|
activé, la "gourmandise" des quantificateurs de
|
|
répétition est inversée, ce qui les rend non
|
|
gourmand par défaut, mais s'ils sont suivis de ?, ils seront
|
|
gourmands.
|
|
</simpara>
|
|
</listitem>
|
|
</orderedlist>
|
|
</para>
|
|
</listitem>
|
|
</orderedlist>
|
|
</para>
|
|
</article>
|
|
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
-->
|