1
0
mirror of https://github.com/php/doc-fr.git synced 2026-03-24 07:02:06 +01:00
Files
archived-doc-fr/reference/pcre/pattern.differences.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
-->