dams Tue Jan 30 01:06:55 2001 EDT Modified files: /phpdoc/fr/functions pcre.xml Log: Updating translation to fit en tree.
Index: phpdoc/fr/functions/pcre.xml diff -u phpdoc/fr/functions/pcre.xml:1.11 phpdoc/fr/functions/pcre.xml:1.12 --- phpdoc/fr/functions/pcre.xml:1.11 Fri Jan 26 06:44:21 2001 +++ phpdoc/fr/functions/pcre.xml Tue Jan 30 01:06:54 2001 @@ -964,7 +964,7 @@ </refsect1> <refsect1 id="regexp.reference"> <title>Détails sur les expressions régulières</title> - <para> + <literallayout> La syntaxe et la sémantique des expressions régulière supportées par PCRE sont décrites ci-dessous. Les expressions régulières sont aussi décrites dans la documentation @@ -973,10 +973,6 @@ chez O'Reilly (ISBN 1-56592-257-3), les décrits en profondeur. Cette description est organisée comme une documentation de référence. - </para> - <refsect2 id="regexp.reference.intro"> - <title>Just a title</title> - <para> Une expression régulière est un masque, qui est appliqué sur une chaîne sujet, de gauche à droite. La plus part des caractères se représentent eux-mêmes. Un exemple trivial : un masque qui serait @@ -987,11 +983,6 @@ dans le masque par des <emphasis>meta</emphasis>-<emphasis>characters</emphasis>, qui ne représentent pas ce qu'ils sont, mais sont interprétés d'une certaine manière. - </para> - </refsect2> - <refsect2 id="regexp.reference.meta"> - <title>Just a title</title> - <para> Il y a deux sortes de méta-caractères : ceux qui sont reconnus n'importe oú dans un masque, hormis entre crochets, et ceux qui sont reconnus entre crochets. A l'extérieur des crochets, les méta caractères sont : @@ -1018,11 +1009,6 @@ - indique un intervalle de caractères ] termine la classe de caractères La section suivante décrit l'utilisation de chaque méta caractères : - </para> - </refsect2> - <refsect2 id="regexp.reference.backslash"> - <title>Just a title</title> - <para> ANTISLASH Le caractère antislash a de nombreuses utilisations. En premier lieu, s'il est suivi d'un caractère non alpha numérique, @@ -1143,11 +1129,6 @@ La différence entre \Z et \z tient au fait que \Z recherche les positions avant les nouvelles lignes et à la fin de la chaîne sujet, tandis que \z ne recherche que la fin de la chaîne. - </para> - </refsect2> - <refsect2 id="regexp.reference.circudollar"> - <title>Just a title</title> - <para> CIRCUMFLEX et DOLLAR En dehors d'une classe de caractère, avec les options par défaut, ^ est une assertion qui n'est vraie que si elle est placée tout au début de la @@ -1180,11 +1161,6 @@ Notez que les méta caractères \A, \Z, et \z peuvent servir à répérer le début et la fin du sujet, et toutes les parties du masque qui commenceront par \A seront toujours ancrées, avec l'option PCRE_MULTILINE ou non. - </para> - </refsect2> - <refsect2 id="regexp.reference.dot"> - <title>Just a title</title> - <para> FULL STOP (PERIOD, DOT) En dehors d'une classe de caractères, un point remplace n'importe quel caractère, même invisible et à l'exception du caractère de nouvelle ligne. Avec l'option @@ -1193,11 +1169,6 @@ Le seul point commun est que les deux ont un comportement particulier vis à vis des caractère de nouvelle ligne. Le point n'a pas de comportement particulier dans une classe de caractères. - </para> - </refsect2> - <refsect2 id="regexp.reference.squarebrackets"> - <title>Just a title</title> - <para> SQUARE BRACKETS Un crochet ouvrant introduit une classe de caractère, et le crochet fermant la conclut. Le crochet fermant n'a pas de signification en lui même. Si le crochet @@ -1248,11 +1219,6 @@ Tous les caractères non alphanumériques autres que \, -, ^ (placé en début de chaîne) et ] n'ont pas de significations particulière, mais ils ne perdront rien à être échappés. - </para> - </refsect2> - <refsect2 id="regexp.reference.verticalbar"> - <title>Just a title</title> - <para> VERTICAL BAR La barre verticale sert à séparer des alternatives. Par exemple, dans le masque dupont|martin @@ -1261,11 +1227,6 @@ toutes les alternatives sont essayées, de gauche à droit, et la première qui est acceptée, est utilisée. Si les alternatives sont dans un sous-masque, elle ne réussiront que si le masque principal réussi aussi. - </para> - </refsect2> - <refsect2 id="regexp.reference.internal_options"> - <title>Just a title</title> - <para> INTERNAL OPTION SETTING Les options PCRE_CASELESS, PCRE_MULTILINE, PCRE_DOTALL, et PCRE_EXTENDED peuvent être changée depuis le masque lui-même, avec des séquences mises "(?" et ")". @@ -1310,12 +1271,7 @@ U et X. L'option (?X) est particulière, car elle doit toujours intervenir avant toutes les autres options, même au niveau du masque entier. Il vaut mieux la mettre au début du masque. - </para> - </refsect2> - <refsect2 id="regexp.reference.subpatterns"> - <title>Just a title</title> - <para> -SUBPATTERNS +sous-masques Les sous-masques sont délimités par des parenthèses, et peuvent être imbriquées. Ajouter des sous-masques a deux utilités : 1. Délimiter des alternatives. Par exemple, le masque @@ -1347,11 +1303,6 @@ (?:(?i) samedi | dimanche) De plus, comme les séquences d'options sont valables sur toute une alternative, le masque ci dessus acceptera aussi "DIMANCHE" que "Dimanche". - </para> - </refsect2> - <refsect2 id="regexp.reference.repetitions"> - <title>Just a title</title> - <para> REPETITION les Répétitions sont spécifiées avec des quantificateurs, qui peuvent être placés à la suite des caractères suivants : @@ -1438,11 +1389,6 @@ correspondante peut l'avoir été lors des précédentes itérations. Par exemple : /(a|(b))+/ accepte "aba" et la deuxième valeur capturée est - </para> - </refsect2> - <refsect2 id="regexp.reference.back_references"> - <title>Just a title</title> - <para> Références arrières (back references) En dehors des classes de caractères, un antislash suivi d'un nombre plus grand que 0 (et possiblement plusieurs chiffres) est une référence arrière (c'est à @@ -1484,11 +1430,6 @@ fonctionne, il faut que la première itération n'ai pas besoin d'utiliser la référence arrière. Cela arrive avec les alternatives, comme dans l'exemple ci dessus, ou avec un quantificateur de minimum 0. - </para> - </refsect2> - <refsect2 id="regexp.reference.assertions"> - <title>Just a title</title> - <para> Les assertions Une assertion est un test sur les caractères suivants ou précédent celui qui est en cours d'étude. Ce test ne consomme par de caractère (ie, on ne déplace pas le @@ -1536,11 +1477,25 @@ Plusieurs assertions peuvent intervenir successivement. Par exemple (?<=\d{3})(?<!999)foo recherche les chaînes "foo" précédée par trois chiffres qui ne sont pas "999". + Notez que chaque assertions est appliquées indépendemment, au +même point + de la chaîne à traiter. Tout d'abord, il est +vérifié que les trois premiers + caractères ont tous des chiffres, puis on s'assure que ces trois +caractères + ne sont pas "999". Le masque précédant n'accepte pas "foo" +précédé de 6 + caractères, les trois premiers étant des chiffres et les +trois suivant + étant différents de "999". Par exemple, ce masque n'acceptera +pas la chaîne + "123abcfoo". Pour ce faire, il faut utiliser : + (?<=\d{3}...)(?<!999)foo + Dans ce masque, la première assertion vérifie les six +premiers caractères, + s'assure que les trois premiers sont des entiers, et la deuxième +assertion + s'assure que les trois derniers caractères ne sont pas "999". De plus, les assertions peuvent être imbriquées : (?<=(?<!foo)bar)baz recherche les occurrences de "baz" qui sont précédées par "bar", qui, à son tour, - n'est pas précédé par "foo". - Les assertions ne sont pas capturantes, et ne peuvent pas être répétées. Si une + n'est pas précédé par "foo". Au contraire, + (?<=\d{3}(?!999)...)foo + est un autre masque, qui recherche les caractères "foo", +précédés par + trois chiffres, suivis trois autres caractères qui ne forment +pas "999". + Les assertions ne sont pas capturantes, et ne peuvent pas être +répétées. Si une assertion contient des sous-masques capturants en son sein, ils seront compris dans le nombre de sous-masques capturants du masque entier. La capture est réalisée pour les assertions positives, mais cela n'a pas de sens pour les @@ -1607,11 +1562,29 @@ va alors faire un test sur les 4 derniers caractères. Si elle échoue, la recherche est immédiatement interrompue. Pour les chaînes très longues, cette approche fait la différence en terme de performance et de temps de recherche. - </para> - </refsect2> - <refsect2 id="regexp.reference.conditional"> - <title>Just a title</title> - <para> + Lorsqu'un masque contient une répétition illimitée +dans un sous-masque, + qui contient lui-même un nombre illimité de +répétiteur, l'utilisation des + sous-masques à utilisation unique sont la seule façon +d'éviter l'échec + de la recherche à cause d'un temps de calcul trop long. + Le masque + (\D+|<\d+>)*[!?] + recherche un nombre illimité de sous-chaînes, qui +contiennent + soit des non-chiffres, ou alors des chiffres inclus dans + <>, suivi soit par ! ou par ?. Lorsqu'il trouve une solution, + ce masque va très vite. Mais, lorsqu'il est appliqué +à une chaîne + telle que : + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + Il lui faut beaucoup de temps pour annoncer un échec. Cela est + du au fait que la chaine peut être divisée en deux +sous-chaînes + d'un grand nombre de façons, et qu'elles ont toutes +été essayées. + (Cet exemple utilisait [!?] plutot qu'un caractère simple, car + PCRE et PHP utilise une optimisation qui permet de detecter rapidement + l'échec lorsqu'un caractère unique est trouvé. Il +se souvient + du dernier caractère qui est attendu, et s'apercoit rapidement + qu'il n'y a pas ce caractère.). Si le masque utilisé est + ((?>\D+)|&;lt;\d+>)*[!?] + les séquences de chiffres ne peuvent pas être trouvées, et +l'échec + intervient rapidement. Les sous-masques conditionnels (CONDITIONAL SUBPATTERNS) Il est possible de lier un sous-masque à un une condition, ou de choisir entre deux sous-masques alternatifs, en fonction du résultat d'une assertion, ou @@ -1648,11 +1621,6 @@ poursuit avec la première alternative, et sinon, avec la seconde. Ce masque recherche des chaînes de la forme dd-aaa-dd ou dd-dd-dd, avec aaa qui sont des lettres, et dd qui sont des chiffres - </para> - </refsect2> - <refsect2 id="regexp.reference.comments"> - <title>Just a title</title> - <para> COMMENTS La séquence (?# marque le début des commentaires, qui se termine à la prochaîne parenthèse fermante. Les parenthèses imbriquées ne sont pas autorisées. @@ -1661,11 +1629,50 @@ Si l'option PCRE_EXTENDED est mise, les caractères dièses # non échappés en dehors d'une classe de caractères introduisent un commentaire qui continuera jusqu'à la prochaîne ligne dans le masque. - </para> - </refsect2> - <refsect2 id="regexp.reference.performances"> - <title>Just a title</title> - <para> +Masques récursifs + Considérons le cas où il faut recherche dans une chaîne, +avec un + niveau d'imbrication infini de parenthèses. Sans l'aide de la +récursivité, le + mieux que nous puissions obtenir est de créer un masque avec un + niveau fixé de profondeur d'imbrication. Il n'est pas possible + de traiter des masques à niveau d'imbrications variable. PCRE fournit + un nouvel outil expérimental qui permet d'utiliser la +récursivité + dans les masques (entre autre). L'option (?R) est fournie pour servir + la cause de la récursivité. Le masque suivant résoud le +problème des + parenthèses (en utilisant l'option PCRE_EXTENDED est utilisée +pour + ignorer les espaces) : + \( ( (?>[^()]+) | (?R) )* \) + Tout d'abord, le masque recherche une parenthèse ouvrante. Puis, + il recherche n'importe quel nombre de sous-chaînes qui sont soit + des séquences de caractères non-parenthèses, ou bien une +recherche + récursive avec le même masque (i.e. une chaîne correctement + inclus entre parenthèses). Finalement, il recherche une + parenthèse fermante. + Cet exemple particulier contient un nombre illimité de +répétitions + imbriquées, ce qui fait que l'utilisation de sous-chaînes à + utilisation unique pour rechercher les séquence de caractères + non-parenthèses est important, lorsqu'il s'applique à une +chaîne + qui n'est pas valide. Par exemple, si on l'applique à + (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa() + la réponse arrive rapidement. Sinon, si les sous-chaînes à +utilisation + unique ne sont pas utilisées, la recherche peut prendre un très +long + temps, car il existe de très nombreuses combinaisons de + + et * à tester avant de conclure à l'échec. + Les valeurs utilisées pour capturer les sous-masques sont celles + utilisées par les niveaux les plus hauts de récursivités, +auquel + la valeur est fixée. Si le masque précédent est +utilisé avec + (ab(cd)ef) + la valeur de la parenthèse capturante est "ef", qui est la dernière + valeur lue au niveau supérieur. Si de nouvelles parenthèses sont + ajoutées, par exemple : + \( ( ( (?>[^()]+) | (?R) )* ) \) + ^ ^ + ^ ^ + alors la chaîne capturée est "ab(cd)ef", c'est à dire le +contenu de la + parenthèses capturant de plus haut niveau. S'il y a plus de 15 +parenthèses + capturantes dans une chaîne, PCRE doit utiliser plus de mémoire pour + stocker ces données. S'il ne peut obtenir cette mémoire +supplémentaire, + il ne fait que sauver les 15 premières, car il n'y a pas moyen de +générer + une erreur de mémoire lors d'une récursion. PERFORMANCE Certaines séquences de recherches sont plus efficaces que d'autres. Ainsi, il est plus efficace d'utiliser une classe de caractères telle que [aeiou] plutôt @@ -1689,8 +1696,30 @@ avec l'option PCRE_DOTALL, ou en ancrant le masque avec ^.*. Cela évite à PCRE de scanner toute la chaîne pour rechercher un caractère de nouvelle ligne et recommencer la recherche. - </para> - </refsect2> + Attention aux masques qui contiennent des quantificateurs infinis + imbriqués. Ils peuvent demander un temps de calcul très long, +lorsqu'appliqués + à une chaîne qui n'accepte pas ce masque. Par exemple, + (a+)* + peut accepter "aaaa" de 33 manières différentes, et ce nombre + croit rapidement avec la taille de la chaîne (le quantificateur + * peut prendre les valeurs de 0, 1, 2, 3, ou 4, et pour chaque cas + non nul, le quantificateur + peut prendre différentes valeurs). + Lorsque le reste de la chaîne est tel que l'on s'achemine vers un + échec, PCRE doit en principe vérifier toutes les +possibilités, et cela + prend un temps extrêmement long. + Un optmiseur repère les cas les plus simples, tel que + (a+)*b + où un caractère simple suit les quantificateurs. Avant de partir + dans les procédures standard de recherche, PCRE s'assure qu'il y a + au moins un "b" dans la chaîne, et si ce n'est pas le cas, l'échec + est annoncé immédiatement. Sinon, il n'y a pas d'optimisation dans + la recherche. Vous pouvez voir la différence de comportement + avec le masque suivant : + (a+)*\d + Le premier retourne un échec quasi immédiatement, s'il est +appliqué + à une ligne de "a", alors que le second masque prend un temps + significatif pour une chaîne de plus de 20 caractères. + </literallayout> </refsect1> </refentry> </reference>