-
Notifications
You must be signed in to change notification settings - Fork 164
Expand file tree
/
Copy pathpattern.differences.xml
More file actions
164 lines (162 loc) · 6.37 KB
/
pattern.differences.xml
File metadata and controls
164 lines (162 loc) · 6.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
<?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
-->