Index: phpdoc/fr/functions/pcre.xml
diff -u phpdoc/fr/functions/pcre.xml:1.2 phpdoc/fr/functions/pcre.xml:1.3
--- phpdoc/fr/functions/pcre.xml:1.2 Sat Jul 22 07:06:14 2000
+++ phpdoc/fr/functions/pcre.xml Mon Nov 13 02:14:14 2000
@@ -1,1534 +1,1729 @@
-
- Expressions régulières compatibles Perl
- PCRE
-
-
-
- La syntaxe des masques utilisés dans ces fonctions ressemble fort à celle de Perl.
- Les expressions seront entourées de délimiteurs, slash (/), par exemple. N'importe
- quel caractère peut servir de délimiteur, tant qu'il n'est pas alphanumérique
- ou n'est pas un backslash (\). Si un délimiteur doit être utilisé dans
- l'expression, il faudra l'échapper avec un backslash.
-
-
-
- Le délimiteur final peut être suivi d'options qui affecteront la recherche.
- Options de recherche.
-
-
-
-
- Exemples de masques valides
-
- /<\/\w+>/
- |(\d{3})-\d+|Sm
- /^(?i)php[34]/
-
-
-
-
-
-
- Exemples de masques invalides
-
- /href='(.*)' - délimiteur final manquant
- /\w+\s*\w+/J - option 'J' inconnue
- 1-\d3-\d3-\d4| - délimiteur initial manquant
-
-
-
-
-
-
-
- Les expressions régulières Perl sont disponibles depuis la PHP 4 et PHP 3.0.9.
-
-
-
-
-
-
-
- preg_match
- Expression régulière standard.
-
-
- Description
-
- int preg_match
- string pattern
- string subject
- array matches
-
-
- preg_match analyse subject
- pour trouver l'expression pattern.
-
-
-
- Si matches est fourni, il sera rempli par les résultats
- de la recherche. $matches[0] contiendra le texte qui satisfait le masque complet,
- $matches[1] contiendra le texte qui satisfait la première parenthèse capturante,
- etc..
-
-
-
- Retourne TRUE si la recherche à réussie, et FALSE sinon (notamment en cas d'erreur).
-
-
-
-
- Extraction d'un numéro de page d'une chaîne.
-
-if (preg_match("/page\s+#(\d+)/i", "Go to page #9.", $parts))
- print "La page suivante est $parts[1]";
-else
- print "Page introuvable.";
-
-
-
- Voir aussi preg_match_all, preg_replace
- et preg_split.
-
-
-
-
-
-
- preg_match_all
- Expression régulière globale.
-
-
- Description
-
- int preg_match_all
- string pattern
- string subject
- array matches
- int order
-
-
- preg_match_all analyse subject
- pour trouver l'expression pattern et met les résultats dans
- matches, dans l'ordre spécifié par order.
-
-
-
- Après avoir trouvé un premier résultat, la recherche continue jusqu'à la fin de la
- chaîne.
-
-
-
- order peut prendre une des deux valeurs suivantes :
-
-
- PREG_PATTERN_ORDER
-
-
- L'ordre est tel que $matches[0] est un tableau qui contient les résultats qui
- satisfont le masque complet, $matches[1] est un tableau qui contient les
- résultats qui satisfont la première parenthèse capturante, etc..
-
-
-preg_match_all("|<[^>]+>(.*)</[^>]+>|U", "<b>example: </b><div align=left>a test</div>", $out, PREG_PATTERN_ORDER);
-print $out[0][0].", ".$out[0][1]."\n";
-print $out[1][0].", ".$out[1][1]."\n"
-
-
-
- Cet exemple va afficher :
-
-
-<b>example: </b>, <div align=left>ceci est un test</div>
-example: , this is a test
-
-
-
- Ainsi, $out[0] est un tableau qui contient les résultats qui satisfont le
- masque complet, et $out[1] est un tableau qui contient les balises entre
- < et >.
-
-
-
-
- PREG_SET_ORDER
-
-
- Les résultats sont classés de telle façon que $matches[0] contient la
- première série de résultat, $matches[1] contient la deuxième série de
- résultat, etc...
-
-
-
-preg_match_all("|<[^>]+>(.*)</[^>]+>|U", "<b>exemple: </b><div align=left>a test</div>", $out, PREG_SET_ORDER);
-print $out[0][0].", ".$out[0][1]."\n";
-print $out[1][0].", ".$out[1][1]."\n"
-
-
-
- Cet exemple va afficher :
-
-
-<b>example: </b>, exemple:
-<div align=left>this is a test</div>, this is a test
-
-
-
- Dans ce cas, $matches[0] est la première série de résultat, et $matches[0][0] contient le texte qui satisfait le masque complet, $matches[0][1] contient le texte de la première parenthèse capturante, etc. De même, $matches[1] contient le texte qui satisfait le masque complet, etc. *
-
-
-
-
-
-
- Si order est omis, PREG_PATTERN_ORDER est utilisé par
- défaut.
-
-
-
- Retourne le nombre de résultat qui satisfont le masque complet, ou FALSE en cas
- d'échec ou d'erreur.
-
-
-
-
- Extraction de tous les numéros de téléphone d'un texte.
-
-preg_match_all("/\(? (\d{3})? \)? (?(1) [\-\s] ) \d{3}-\d{4}/x",
- "Call 555-1212 or 1-800-555-1212", $phones);
-
-
-
-
- Voir aussi preg_match, preg_replace
- et preg_split.
-
-
-
-
-
-
- preg_replace
- Rechercher et remplacer par expression régulière standard.
-
-
- Description
-
- mixed preg_replace
- mixed pattern
- mixed replacement
- mixed subject
-
-
- preg_replace analyse subject pour
- trouver l'expression pattern et remplace les résultats par
- replacement.
-
-
-
- replacement peut contenir des références de la forme
- \\n. Ces références seront
- remplacées par le texte capturé par la n'-ième
- parenthèse capturante du masque. n peut prendre
- des valeurs de 0 à 99, et \\0 correspond au texte de qui
- satisfait le masque complet. Les parenthèses ouvrantes sont comptées de gauche
- à droit (en commencant à 1) pour déterminer le numéro de parenthèse capturante.
-
-
-
- Si la recherche n'aboutit à aucun résultat, subject sera
- inchangé.
-
-
-
- Tous les paramètres de preg_replace peuvent être des
- tableaux :
-
-
-
- Si subject est un tableau, alors l'opération sera
- appliquée à chacun des éléments du tableau, et le tableau sera retourné.
-
-
-
- Si pattern et replacement
- sont des tableaux, alors preg_replace prend une valeur de
- chaque tableau, et l'utilise pour faire la recherche et le remplacement.
- Si replacement a moins d'éléments que pattern,
- alors la chaîne vide est utilisé pour le reste des valeurs.
- Si pattern est un tableau, et que
- replacement est une chaîne, alors cette chaîne sera
- utilisée pour chaque valeur de pattern.
- Le contraire n'aurait pas de sens.
-
-
-
- /e force preg_replace à traiter
- replacement comme du code PHP une fois que les
- substitutions adéquates ont été faites. Conseil :assurez vous que
- replacement est un code PHP valide, car sinon, PHP
- trouvera une erreur d'analyse (parse error) dans cette ligne.
-
-
- Cette option a été ajoutée en PHP 4.0.
-
-
-
-
-
-
- Remplacement de plusieurs valeurs
-
-$patterns = array("/(19|20\d{2})-(\d{1,2})-(\d{1,2})/", "/^\s*{(\w+)}\s*=/");
-$replace = array("\\3/\\4/\\1", "$\\1 =");
-print preg_replace($patterns, $replace, "{startDate} = 1999-5-27");
-
-
-
- Cet exemple va afficher :
-
-
- $startDate = 5/27/1999
-
-
-
- Utilisation de l'option /e
-
-preg_replace("/(<\/?)(\w+)([^>]*>)/e", "'\\1'.strtoupper('\\2').'\\3'", $html_body);
-
-
-
- Cela va mettre en majuscule toutes les balises HTML du texte.
-
-
-
-
- Voir aussi preg_match, preg_match_all
- et preg_split.
-
-
-
-
-
-
- preg_split
- Eclatement d'une chaîne par expression régulière.
-
-
- Description
-
- array preg_split
- string pattern
- string subject
- int limit
- int flags
-
-
-
-
- Le paramètre flags a été ajouté dans PHP Beta 3.
-
-
-
- Retourne un tableau contenant les sous chaînes de subject,
- séparées par les chaînes qui vérifient pattern.
-
-
-
- Si limit est donné, seules les limit
- premières chaînes seront retournées.
-
-
-
- Si le flag est PREG_SPLIT_NO_EMPTY, alors seul les sous chaînes non nulles
- seront retournées.
-
-
-
-
- Eclatement d'une chaîne de recherche.
-
-$keywords = preg_split("/[\s,]+/", "hypertext language, programming");
-
-
-
- Voir aussi preg_match, preg_match_all
- et preg_replace.
-
-
-
-
-
-
- preg_quote
- Echappement des caractères spéciaux des expressions régulières.
-
-
- Description
-
- string preg_quote
- string str
-
-
-
- preg_quote ajoute un backslash devant tous les caractères de
- la chaîne str. Cela est très utile si vous avez une chaîne
- qui va servir de masque, mais qui est générée durant l'exécution.
-
-
-
- Les caractères spéciaux qui seront échappés :
- . \\ + * ? [ ^ ] $ ( ) { } = ! < > | :
-
-
-
- Cette fonction a été ajoutée dans PHP 3.0.9.
-
-
-
-
-
-
-
- preg_grep
- Retourne un tableau avec les résultat de la recherche.
-
-
- Description
-
- array preg_grep
- string pattern
- array input
-
-
-
- preg_grep retourne un tableau qui contient les éléments
- de inputqui satisfont le masque
- pattern.
-
-
-
-
- Exemple avec preg_grep
-
-preg_grep("/^(\d+)?\.\d+$/", $array); // recherche les nombres à virgule flottante
-
-
-
-
-
- Cette fonction a été ajoutée dans PHP 4.0.
-
-
-
-
-
-
- Options de recherche
- Options disponibles pour les expressions régulières.
-
-
- Description
-
- Les options de PCRE sont listées ci dessous. Les noms entre parenthèses sont les
- noms internes à PCRE.
-
-
-
-
-
-
- i (PCRE_CASELESS)
-
-
- Effectue une recherche insensible à la casse.
-
-
-
-
-
- m (PCRE_MULTILINE)
-
-
- Par défaut, PCRE traite la chaîne sujet comme une seule ligne (même si
- cette chaîne contient des retours chariot). Le méta-caractère "début de
- ligne" (^) ne sera valable qu'une seule fois, au début de la ligne, et
- le méta caractère "fin de ligne " ($) ne sera valable qu'à la fin de la
- chaîne, ou avant le retour chariot final (à moins que l'option E ne soit
- mise). C'est le même fonctionnement qu'en Perl.
-
-
- Lorsque cette option est mise, " début de ligne " et " fin de ligne "
- correspondront alors aux caractères suivant et précédent immédiatement un
- caractère de nouvelle ligne, en plus du début et de la fin de la chaîne.
- C'est le même fonctionnement que l'option Perl /m.
- Si il n'y a pas de caractère de nouvelle ligne "\n" dans la chaîne sujet,
- ou si il n'y a aucune occurrence de ^ ou $ dans le masque, cette option
- ne sert à rien.
-
-
-
-
-
- s (PCRE_DOTALL)
-
-
- Avec cette option, le méta caractère point (.) remplace n'importe quel
- caractère, y compris les nouvelles lignes. Sans cette option, le
- caractère point ne remplace pas les nouvelles lignes. Cette option est
- équivalente à l'option Perl /s. Une classe de caractère négative telle
- que [^a] acceptera toujours les caractères de nouvelles lignes,
- indépendamment de cette option.
-
-
-
-
-
- x (PCRE_EXTENDED)
-
-
- Avec cette option, les caractères d'espacement sont ignorés, sauf
- lorsqu'ils sont échappés, ou à l'intérieur d'une classe de caractère, et
- tous les caractères entre # non échappés et en dehors d'une classe de
- caractère, et le prochain caractère de nouvelle ligne sont ignorés. C'est
- l'équivalent Perl de l'option /x : elle permet l'ajout de commentaires
- dans les masques compliqués. Notez bien, cependant, que cela ne
- s'appliquent qu'aux caractères de données. Les caractères d'espacement
- ne doivent jamais apparaître dans les séquences spéciales d'un masque,
- comme par exemple dans la séquence (?( qui introduit une parenthèse
- conditionnelle.
-
-
-
-
-
- e
-
-
- Avec cette option, preg_replace effectue la
- substitution normale des \\ dans la chaîne de remplacement, puis
- l'évalue comme un code PHP, et utilise le résultat pour remplacer la
- chaîne de recherche.
-
-
- Seule preg_replace utilise cette option. Elle est
- ignorée par les autres.
+
+ Expressions régulières compatibles Perl
+ PCRE
+
+
+
+ La syntaxe des masques utilisés dans ces fonctions ressemble
+ fort à celle de Perl. Les expressions seront entourées
+ de délimiteurs, slash (/), par exemple. N'importe quel
+ caractère peut servir de délimiteur, tant qu'il
+ n'est pas alphanumérique ou n'est pas un backslash (\).
+ Si un délimiteur doit être utilisé dans
+ l'expression, il faudra l'échapper avec un backslash.
+
+
+ Le délimiteur final peut être suivi d'options qui
+ affecteront la recherche.
+ Options de recherche.
+
+
+
+ Exemples de masques valides
+
+ /<\/\w+>/
+ |(\d{3})-\d+|Sm
+ /^(?i)php[34]/
+
+
+
+
+
+ Exemples de masques invalides
+
+
+
+ /href='(.*)' - délimiteur final manquant
+
+
+
+
+ /\w+\s*\w+/J - option 'J' inconnue
+
+
+
+
+ 1-\d3-\d3-\d4| - délimiteur initial manquant
+
+
+
+
+
+
+
+ Les expressions régulières Perl sont disponibles
+ depuis la PHP 4 et PHP 3.0.9.
+
+
+
+
+
+
+ preg_match
+ Expression régulière standard.
+
+
+ Description
+
+
+ int preg_match
+ string pattern
+ string subject
+ array
+ matches
+
+
+
+
+ preg_match analyse subject
+ pour trouver l'expression pattern.
+
+
+ Si matches est fourni, il sera rempli par
+ les résultats de la recherche. $matches[0] contiendra le
+ texte qui satisfait le masque complet, $matches[1] contiendra
+ le texte qui satisfait la première parenthèse capturante,
+ etc..
+
+
+ Retourne TRUE si la recherche à réussie, et
+ FALSE sinon (notamment en cas d'erreur).
+
+
+
+ Extraction d'un numéro de page d'une chaîne.
+
+if (preg_match("/page\s+#(\d+)/i", "Go to page #9.", $parts))
+ print "La page suivante est $parts[1]";
+else
+ print "Page introuvable.";
+
+
+
+ Trouve le mot "web"
+
+// \b, dans le masque, indique une limite de mot, de faon ce que le mot
+// "web" uniquement soit repr, et pas seulement des parties de mots comme
+// dans "webbing" ou "cobweb"
+if (preg_match ("/\bweb\b/i", "PHP est le meilleur langage de script du web.")) {
+ print "Un mot a t trouv.";
+} else {
+ print "Un mot n'a pas t trouv.";
+}
+if (preg_match ("/\bweb\b/i", "PHP est le meilleur langage de script pour les webagency.")) {
+ print "Un mot a t trouv.";
+} else {
+ print "Un mot n'a pas t trouv.";
+}
+
+
+
+ Lire un nom de domaine dans une URL
+
+// reprer le nom de l'hte dans l'URL
+preg_match("/^(http:\/\/)?([^\/]+)/i",
+"http://www.php.net/index.html", $matches);
+$host = $matches[2];
+// reprer les deux derniers segments du nom de l'hte
+preg_match("/[^\.\/]+\.[^\.\/]+$/",$host,$matches);
+echo "Le nom de domaine est : ".$matches[0]."\n";
+
+
+ Cet exemple va afficher :
+
+Le nom de domaine est : php.net
+
+ Voir aussi preg_match_all,
+ preg_replace
+ et preg_split.
+
+
+
+
+
+
+ preg_match_all
+ Expression régulière globale.
+
+
+ Description
+
+
+ int preg_match_all
+ string pattern
+ string subject
+ array matches
+ int
+ order
+
+
+
+
+ preg_match_all analyse subject
+ pour trouver l'expression pattern
+ et met les résultats dans matches,
+ dans l'ordre spécifié par order.
+
+
+ Après avoir trouvé un premier résultat,
+ la recherche continue jusqu'à la fin de la chaîne.
+
+
+ order peut prendre une des deux valeurs suivantes :
+
+
+ PREG_PATTERN_ORDER
+
+
+ L'ordre est tel que $matches[0] est un tableau qui
+ contient les résultats qui satisfont le masque
+ complet, $matches[1] est un tableau qui contient les
+ résultats qui satisfont la première
+ parenthèse capturante, etc..
+
+
+preg_match_all("|<[^>]+>(.*)</[^>]+>|U", "<b>example: </b><div align=left>a test</div>", $out, PREG_PATTERN_ORDER);
+print $out[0][0].", ".$out[0][1]."\n";
+print $out[1][0].", ".$out[1][1]."\n"
+
+
+ Cet exemple va afficher :
+
+
+<b>exemple: </b>, <div align=left>ceci est un test</div>
+exemple: , ceci est un test
+
+
+ Ainsi, $out[0] est un tableau qui contient les
+ résultats qui satisfont le masque complet,
+ et $out[1] est un tableau qui contient les balises entre > et <.
+
+
+
+
+ PREG_SET_ORDER
+
+
+ Les résultats sont classés de telle
+ façon que $matches[0] contient la première
+ série de résultat, $matches[1] contient la
+ deuxième série de résultat, etc...
+
+
+preg_match_all("|<[^>]+>(.*)</[^>]+>|U", "<b>exemple: </b><div align=left>a test</div>", $out, PREG_SET_ORDER);
+print $out[0][0].", ".$out[0][1]."\n";
+print $out[1][0].", ".$out[1][1]."\n"
+
+
+ Cet exemple va afficher :
+
+
+<b>example: </b>, exemple:
+<div align=left>this is a test</div>, this is a test
+
+
+ Dans ce cas, $matches[0] est la première série de
+ résultat, et $matches[0][0] contient le texte qui satisfait
+ le masque complet, $matches[0][1] contient le texte de la
+ première parenthèse capturante, etc... De même,
+ $matches[1] contient le texte qui satisfait le masque complet, etc.
+
+
+
+
+
+
+ Si order est omis, PREG_PATTERN_ORDER est
+ utilisé par défaut.
+
+
+ Retourne le nombre de résultat qui satisfont le masque
+ complet, ou FALSE en cas d'échec ou d'erreur.
+
+
+
+
+ Extraction de tous les numéros de téléphone d'un texte.
+
+
+preg_match_all("/\(? (\d{3})? \)? (?(1) [\-\s] ) \d{3}-\d{4}/x",
+ "Call 555-1212 or 1-800-555-1212", $phones);
+
+
+
+
+
+ Recherche les couples de balises HTML (gourmand)
+
+// Cet exemple utilise les rfrences arrires (\\2). Elles indiquent
+// l'analyseur qu'il doit trouver quelquechose qu'il a dj repr un peu
+// plus tt (ici, ([\w]+)).
+$html = "<b>bold text</b><a href=salut.html>clique moi</a>
+
+preg_match_all ("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $html, $matches);
+
+for ($i=0; $i< count($matches[0]); $i++) {
+echo "trouv: ".$matches[0][$i]."\n";
+echo "partie 1: ".$matches[1][$i]."\n";
+echo "partie 2: ".$matches[3][$i]."\n";
+echo "partie 3: ".$matches[4][$i]."\n\n";
+}
+
+
+ Cet exemple va produire :
+
+trouv: <b>bold text</b>
+partie 1: <b>
+partie 2: bold text
+partie 3: </b>
+
+trouv: <a href=salut.html>clique moi</a>
+partie 1: <a href=salut.html>
+partie 2: clique moi
+partie 3: </a>
+
+
+
+ Voir aussi preg_match,
+ preg_replace
+ et preg_split.
+
+
+
+
+
+
+ preg_replace
+ Rechercher et remplacer par expression régulière standard.
+
+
+ Description
+
+
+ mixed preg_replace
+ mixed pattern
+ mixed replacement
+ mixed subject
+ int
+ limit
+
+
+
+
+ preg_replace analyse subject
+ pour trouver l'expression pattern et remplace les
+ résultats par replacement.
+
+
+ replacement peut contenir des
+ références de la forme
+ \\n. Ces
+ références seront remplacées par le texte
+ capturé par la n'-ième
+ parenthèse capturante du masque. n
+ peut prendre des valeurs de 0 à 99, et \\0
+ correspond au texte de qui satisfait le masque complet. Les
+ parenthèses ouvrantes sont comptées de gauche
+ à droit (en commencant à 1) pour déterminer
+ le numéro de parenthèse capturante.
+
+
+ Si la recherche n'aboutit à aucun résultat,
+ subject sera inchangé.
+
+
+ Tous les paramètres de preg_replace
+ peuvent être des tableaux.
+
+
+ Si subject est un tableau, alors l'opération
+ sera appliquée à chacun des éléments du
+ tableau, et le tableau sera retourné.
+
+
+ Si pattern et replacement
+ sont des tableaux, alors preg_replace prend une valeur
+ de chaque tableau, et l'utilise pour faire la recherche et le remplacement.
+ Si replacement a moins d'éléments
+ que pattern, alors la chaîne vide est
+ utilisé pour le reste des valeurs. Si pattern
+ est un tableau, et que replacement est une
+ chaîne, alors cette chaîne sera utilisée pour
+ chaque valeur de pattern.
+ Le contraire n'aurait pas de sens.
+
+
+ /e force preg_replace
+ à traiter replacement comme du
+ code PHP une fois que les substitutions adéquates ont
+ été faites. Conseil :assurez vous que
+ replacement est un code PHP valide, car sinon, PHP
+ trouvera une erreur d'analyse (parse error) dans cette ligne.
+
+
+
+ Remplacement de plusieurs valeurs
+
+$patterns = array ("/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/",
+ "/^\s*{(\w+)}\s*=/");
+$replace = array ("\\3/\\4/\\1\\2", "$\\1 =");
+print preg_replace ($patterns, $replace, "{startDate} = 1999-5-27");
+
+
+ Cet exemple va afficher :
+
+ $startDate = 5/27/1999
+
+
+ Utilisation de l'option /e
+
+preg_replace("/(<\/?)(\w+)([^>]*>)/e", "'\\1'.strtoupper('\\2').'\\3'", $html_body);
+
+
+ Cela va mettre en majuscule toutes les balises HTML du texte.
+
+
+
+ Conversion HTML en text
+
+// $document contient un document HTML
+// Ce script va effacer les balises HTML, les javascript
+// et les espaces. Il remplace aussi queqlues entites HTML
+// courante en leur quivalent texte.
+
+$search = array ("'<script[^>]*?>.*?</script>'si", // Supprime le javascript
+ "'<[\/\!]*?[^<>]*?>'si", // Supprime les balises HTML
+ "'([\r\n])[\s]+'", // Supprime les espaces
+ "'&(quot|#34);'i", // Supprime les entitees HTML
+ "'&(amp|#38);'i",
+ "'&(lt|#60);'i",
+ "'&(gt|#62);'i",
+ "'&(nbsp|#160);'i",
+ "'&(iexcl|#161);'i",
+ "'&(cent|#162);'i",
+ "'&(pound|#163);'i",
+ "'&(copy|#169);'i",
+ "'&#(\d+);'e"); // Evaluation comme PHP
+
+$replace = array ("",
+ "",
+ "\\1",
+ "\"",
+ "&",
+ "<",
+ ">",
+ " ",
+ chr(161),
+ chr(162),
+ chr(163),
+ chr(169),
+ "chr(\\1)");
+
+$text = preg_replace ($search, $replace, $document);
+
+
+
+
+
+ Le paramtre limit a t ajout
+ partir de PHP 4.0.1pl2.
+
+
+
+ Voir aussi preg_match,
+ preg_match_all
+ et preg_split.
+
+
+
+
+
+
+ preg_split
+
+ Eclatement d'une chaîne par expression régulière.
+
+
+
+ Description
+
+
+ array preg_split
+ string pattern
+ string subject
+ int
+ limit
+
+ int
+ flags
+
+
+
+
+
+
+ Le paramètre flags a été
+ ajouté dans PHP Beta 3.
+
+
+
+
+ Retourne un tableau contenant les sous chaînes
+ de subject, séparées
+ par les chaînes qui vérifient pattern.
+
+
+
+ Si limit est donné, seules
+ les limit premières chaînes
+ seront retournées.
+
+
+
+ Si le flag est PREG_SPLIT_NO_EMPTY, alors seul les sous chaînes
+ non nulles seront retournées.
+
+
+
+
+ Eclatement d'une chaîne de recherche.
+
+// scinde la phrase grce aux virgules et espacements
+// ce qui inclus les " ", \r, \t, \n et \f
+$keywords = preg_split ("/[\s,]+/", "langage hypertexte, programmation");
+
+
+
+
+ Scinder une chane en caractres
+
+
+$str = 'string';
+$chars = preg_split('//', $str, 0, PREG_SPLIT_NO_EMPTY);
+print_r($chars);
+
+
+
+ Voir aussi preg_match,
+ preg_match_all
+ et preg_replace.
+
+
+
+
+
+
+
+ preg_quote
+
+ Echappement des caractères spéciaux des expressions régulières.
+
+
+
+ Description
+
+
+ string preg_quote
+ string str
+ string
+ delimiter
+
+
+
+
+ preg_quote ajoute un backslash devant tous
+ les caractères de la chaîne str.
+ Cela est très utile si vous avez une chaîne qui va
+ servir de masque, mais qui est générée durant
+ l'exécution.
+
+
+ Si l'argument optionnel delimiter est fourni,
+ il sera aussi chapp. Ceci est pratique pour chapper le dlimiteur
+ requis par les fonctions PCRE. Le slash / est le dlimiteur le
+ plus rpandu.
+
+
+ Les caractères spéciaux qui seront échappés :
+ . \\ + * ? [ ^ ] $ ( ) { } = ! < > | :
+
+
+
+
+$keywords = "$40 pour un g3/400";
+$keywords = preg_quote ($keywords, "/");
+echo $keywords; // retourne \$40 pour un g3\/400
+
+
+
+ Mise en italique d'un mot dans un texte
+
+
+// Dans cet exemple, preg_quote($word) sert viter que les astrisques
+// prennent une valeur particulire dans l'exepression
+// rgulire.
+
+$textbody = "Ce livre est *trs* difficile trouver.";
+$word = "*trs*";
+$textbody = preg_replace ("/".preg_quote($word)."/",
+ "<i>".$word."</i>",
+ $textbody);
+
+
+
+
+
+
+
+
+ preg_grep
+ Retourne un tableau avec les résultat de la recherche.
+
+
+ Description
+
+
+ array preg_grep
+ string pattern
+ array input
+
+
+
+
+ preg_grep retourne un tableau qui
+ contient les éléments de input
+ qui satisfont le masque pattern.
+
+
+
+
+ Exemple avec preg_grep
+
+// recherche les nombres à virgule flottante
+preg_grep("/^(\d+)?\.\d+$/", $array);
+
+
+
+
+
+
+
+ Options de recherche
+
+ Options disponibles pour les expressions régulières.
+
+
+
+ Description
+
+ Les options de PCRE sont listées ci dessous. Les noms entre
+ parenthèses sont les noms internes à PCRE.
+
+
+
+
+
+ i (PCRE_CASELESS)
+
+
+ Effectue une recherche insensible à la casse.
+
+
+
+
+ m (PCRE_MULTILINE)
+
+
+ Par défaut, PCRE traite la chaîne sujet comme une seule
+ ligne (même si cette chaîne contient des retours chariot).
+ Le méta-caractère "début de ligne" (^) ne sera
+ valable qu'une seule fois, au début de la ligne, et le
+ méta caractère "fin de ligne " ($) ne sera valable
+ qu'à la fin de la chaîne, ou avant le retour chariot
+ final (à moins que l'option E ne soit mise). C'est le
+ même fonctionnement qu'en Perl.
+
+
+ Lorsque cette option est mise, " début de ligne " et
+ " fin de ligne " correspondront alors aux caractères
+ suivant et précédent immédiatement un
+ caractère de nouvelle ligne, en plus du début
+ et de la fin de la chaîne. C'est le même
+ fonctionnement que l'option Perl /m. Si il n'y a pas de
+ caractère de nouvelle ligne "\n" dans la chaîne sujet,
+ ou si il n'y a aucune occurrence de ^ ou $ dans le masque, cette option
+ ne sert à rien.
+
+
+
+
+ s (PCRE_DOTALL)
+
+
+ Avec cette option, le méta caractère point (.)
+ remplace n'importe quel caractère, y compris les nouvelles
+ lignes. Sans cette option, le caractère point ne remplace
+ pas les nouvelles lignes. Cette option est équivalente
+ à l'option Perl /s. Une classe de caractère
+ négative telle que [^a] acceptera toujours les
+ caractères de nouvelles lignes, indépendamment
+ de cette option.
+
+
+
+
+ x (PCRE_EXTENDED)
+
+
+ Avec cette option, les caractères d'espacement sont
+ ignorés, sauf lorsqu'ils sont échappés,
+ ou à l'intérieur d'une classe de caractère,
+ et tous les caractères entre # non échappés
+ et en dehors d'une classe de caractère, et le prochain
+ caractère de nouvelle ligne sont ignorés. C'est
+ l'équivalent Perl de l'option /x : elle permet l'ajout
+ de commentaires dans les masques compliqués. Notez bien,
+ cependant, que cela ne s'appliquent qu'aux caractères de
+ données. Les caractères d'espacement ne doivent
+ jamais apparaître dans les séquences spéciales
+ d'un masque, comme par exemple dans la séquence (?( qui
+ introduit une parenthèse conditionnelle.
-
-
- Cette option a été ajoutée dans PHP 4.0.
-
-
-
-
-
-
- A (PCRE_ANCHORED)
-
-
- Avec cette option, le masque est ancré de force, c'est à dire que le masque
- doit s'appliquer entre le début et la fin de la chaîne sujet pour être
- considéré comme trouvé. Il est possible de réaliser le même effet en
- ajoutant les méta-caractères adéquats, ce qui est la seule manière de le
- faire en Perl.
-
-
-
-
-
- E (PCRE_DOLLAR_ENDONLY)
-
-
- Avec cette option, le méta-caractère $ ne sera valable qu'à la fin de la
- chaîne sujet. Sans cette option, $ est aussi valable avant une nouvelle
- ligne, si cette dernière est le dernier caractère de la chaîne. Cette option
- est ignorée si l'option m est mise. Il n'y a pas
- d'équivalent en Perl.
-
-
-
-
-
- S
-
-
- Lorsqu'un masque est utilisé plusieurs fois, cela vaut la peine de passer
- quelques instants de plus pour l'analyser et optimiser le code pour accélérer
- les traitements ultérieurs. Cette option force cette analyse plus poussée.
- Actuellement, cette analyse n'est utile que pour les masques non ancrés, qui
- ne commencent pas par un caractère fixe.
-
-
-
-
-
- U (PCRE_UNGREEDY)
-
-
- Cette option inverse la tendance à la gourmandise des expressions régulières.
- Vous pouvez aussi inverser cette tendance au coup par coup avec un ?.
- De même, si cette option est mise, le ? rendra gourmand une séquence. Cette
- option n'est pas compatible avec Perl. Elle peut aussi être mise dans le
- masque avec l'option (?U).
-
-
-
-
-
- X (PCRE_EXTRA)
-
-
- Cette option ajoute d'autres fonctionnalités incompatible avec le PCRE de
- Perl. Tous les backslash suivis d'une lettre qui n'aurai pas de signification
- particulière cause une erreur, permettant la réservation de ces combinaisons
- pour des ajouts fonctionnels ultérieurs. Par défaut, comme en Perl, les
- backslash suivi d'une lettre sans signification particulière sont traités
- comme des valeurs litérales. Actuellement, cette option ne déclenche pas
- d'autres fonctions.
-
-
-
-
-
-
-
-
-
-
- Syntaxe des masques
- Fonctionnement des expressions régulières.
-
-
- Description
-
- La bibliothèque PCRE est un ensemble de fonctions qui implémentent la recherche
- par expressions régulières, en utilisant la même syntaxe et la même sémantique
- que le Perl 5, avec quelques nuances (voir ci-dessous). L'implémentation actuelle
- est celle de Perl 5.005.
-
-
-
- Différences avec Perl
-
- Les différences avec le Perl 5.005 sont présentée ici :
-
- 1. Par défaut, un caractère d'espacement correspond à n'importe quel caractère
- que la fonction C isspace() reconnaît, bien qu'il soit possible de recompiler
- la bibliothèque PCRE avec d'autres tables de caractères. Normalement, isspace()
- retourne TRUE pour les espaces, les retours chariot, les nouvelles lignes, les
- formfeed, les tabulations verticales et horizontales. Le 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 version 5.004 et 5.005, l'option \s l'ignore.
-
- 2. PRCE ne tolère pas la répétition de quantificateurs dans les expressions. Perl
- le permet, mais cela ne signifie pas ce que vous pourriez 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.
-
- 3. 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.
-
- 4. 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 "\0" dans le masque pour rechercher les caractères nul.
-
- 5. Les séquence d'échappement suivantes ne sont pas supportées par le Perl: \l,
- \u, \L, \U, \E, \Q. En fait, elles sont implémentées par la gestion intrinsèque
- de chaînes du Perl, et ne font pas partie de ses caractères spéciaux.
-
- 6. L'assertion \G du Perl n'est pas supportée car elle n'est pas pertinente pour
- faire des recherches avec des masques uniques.
-
- 7. De manière assez évidente, PCRE n'accepte pas la construction (?{code})
-
- 8. Au moment de l'écriture de PCRE, Perl 5.005_02 avait quelques comportement
- é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
-
- 9. 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.
-
- 10. PCRE propose quelques extensions aux expressions régulières du Perl.
- (a) Bien que les assertions avec retour (lookbehind) soit obligée d'apparier
- une chaîne de longueur fixe, toutes les assertions avec retour peuvent avoir
- une longueur différente. Perl 5.005 leur impose d'avoir toutes la même longueur.
- (b) Si PCRE_DOLLAR_ENDONLY est mis, et que PCRE_MULTILINE n'est pas mis, le
- méta caractère $ ne s'applique qu'à la fin physqiue de la chaîne, et non
- pas avant les caractères de nouvelle ligne.
- (c) Si PCRE_EXTRA est mis, un backslash suivi d'une lettre sans signification
- spéciale est considérée comme une erreur.
- (d) SI PCRE_UNGREEDY est mis, la "gourmandise" des quantificateurs de
- répétition est inversées, ce qui est rend non gourmand par défaut, mais si
- ils sont suivis de ?, il seront gourmands.
-
-
-
-
- Détails sur les expressions régulières
-
- 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 Perl, et dans un grand nombre d'autres livres, avec de nombreux
- exemples. Jeffrey Friedl's "Mastering Regular Expressions", édité 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.
-
- 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
-
- Le rapide renard gris
-
- Pourra correspondre à une partie de la chaîne sujet qui sera identique au masque.
- La puissance des expressions régulières provient de leur capacité à autoriser des
- alternatives et des quantificateur de répétitions dans le masque. Ils sont encodés
- dans le masque par des meta-characters,
- qui ne représentent pas ce qu'ils sont, mais sont interprétés d'une certaine
- manière.
-
- 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 :
-
- \ Caractère d'échappement, avec de multiples usages.
- ^ Le début de la chaîne sujet (ou de ligne, en mode multiligne)
- $ La fin de la chaîne sujet (ou de ligne, en mode multiligne)
- . Remplace n'importe quel caractère, hormis le caractère de nouvelle ligne
- (par défaut) ;
- [ Caractère de début de définition de classe
- ] Caractère de fin de définition de classe
- | Caractère de début d'alternative
- ( Caractère de début de sous masque
- ) Caractère de fin de sous masque
- ? Etend le sens de (
- mais aussi quantificateur de 0 ou 1
- mais aussi quantificateur de minimisation
- * Quantificateur de 0 ou plus
- + Quantificateur de 1 ou plus
- { Caractère de début de quantificateur minimum/maximum
-
-
- La partie du masque qui est entourée de crochet et appelé une classe de caractères. Dans les classes de caractères, les seul méta caractères autorisés sont
-
- \ Caractère d'échappement, avec de multiples usages
- ^ négation de la classe, mais uniquement si placé tout au début de la
- classe
- - 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 :
-
-BACKSLASH
- Le caractère backslash a de nombreuses utilisations. En premier lieu, si il est
- suivi d'un caractère non alpha numérique, il ne prendra pas la signification
- spéciale qui y est rattachée. Cette utilisation du backslash comme caractère
- d'échappement s'applique à l'intérieur et à l'extérieur des classes de caractères.
-
- Par exemple, pour recherche le caractère étoile "*", il faut écrire dans le
- masque : "\*". Cela s'applique dans tous les cas, que le caractère qui suive
- soit un méta-caractère ou non. C'est un moyen sur pour s'assurer qu'un caractère
- sera recherché pour sa valeur litérale, plutot que pour sa valeur spéciale. En
- particulier, pour rechercher les backslash, il faut écrire : "\\".
-
- Si un masque est utilisé avec l'option PCRE_EXTENDED, les espaces blancs du masque,
- mais qui ne sont pas dans une classe de caractères, et les caractères entre
- dièses "#", ainsi que les nouvelles lignes sont ignorées. Le backslash peut être
- utilisé pour échapper et ainsi rechercher un espace ou un dièse.
-
- La deuxième utilité du backslash est de pouvoir coder des caractères invisibles
- dans les masques. Il n'y a pas de restriction sur la place de ces caractères
- invisibles, hormis pour le caractère nul qui doit terminer le masque. Lors de la
- préparation du masque, il est souvent plus pratique d'utiliser les séquences d'échappement
- suivantes, plutôt que le caractère binaire qu'elle représente :
-
- \a alarme, c'est à dire le caractère BEL (hex 07)
- \cx "control-x", avec x qui peut être n'importe quel caractère.
- \e escape (hex 1B)
- \f formfeed (hex 0C)
- \n nouvelle ligne (hex 0A)
- \r retour chariot (hex 0D)
- \t tabulation (hex 09)
- \xhh caractère en hexadécimal, de code hh
- \ddd caractère en octal, de code ddd, ou référence arrière
-
- Dans la séquence "\cx" si "x" est en minuscule, il est converti en majuscule.
- Puis, le bit 6 (hex 40) est inversé. Ainsi "\cz" devient 1A, mais "\c{" devient
- hex 3B, tandis que "\c;" devient hex 7B.
-
- Après "\x", deux caractères hexadécimaeux sont lus (les lettres peuvent être en
- majuscule ou minuscule).
- Après "\0", deux caractères octal sont lus. Dans chacun des cas, le
- méta-caractère tente de lire autant de caractère que possible. Ainsi la séquence
- "\0\x\07", sera comprise comme deux caractères nuls, suivi d'un caractère alarme
- (BEL). Assurez vous que vous fournissez suffisamment de chiffres après le
- méta-caractère.
-
- La gestion de la séquence "\y", avec y <> 0 est plutot compliquée. En dehors
- des caractères de classes, PCRE va lire y et tous les caractères qui suivent
- comme des chiffres décimaux. Si y est plus petit que 10, ou bien si il y a déjà
- eu au moins autant de parenthèses ouvrantes auparavant, la séquence est prise
- pour une référence de retour. Le détail sera vu ultérieurement,
- après la section sur les sous-masques.
-
- A l'intérieur d'un caractère de classe, ou si y est plus grand que 10, et qu'il
- n'y a pas eu assez de parenthèses ouvrantes auparavant, PCRE lis jusqu'à 3
- chiffres octals à la suite du backslash, et génére un octet unique, à partir
- des 8 bits de poids faible de la séquence. Tous les chiffres qui suivent ne sont
- pas interprétés, et se representent eux-mêmes. Par exemple,
-
- \040 est une autre manière d'écrire un espace
- \40 est identique, dans la mesure oú il n'y a pas 40 parenthèses
- ouvrantes auparavant.
- \7 est toujours une référence de retour.
- \11 peut être une référence de retour, ou une tabulation, tandis que
- \011 est toujours une tabulation
- \011 est toujours une tabulation
- \0113 est une tabulation suivi du caractère "3"
- \113 est le caractère 113 (étant donné qu'il ne peut y avoir plus de
- 99 référence de arrière)
- \377 est un octet dont tous les bits sont à 1
- \81 peut être soit une référence de arrière, soit le caractère NULL, suivi des
- caractères "8" et "1"
-
- Les valeurs octales supérieures ou égales à 100 ne doivent pas être introduite
- par un 0, car seuls les trois premiers octets seront lus.
-
- Toutes les séquences qui définissent une valeur d'un seul octet peuvent être
- utilisé dans les classes de caractères, et à l'extérieur. De plus, dans une
- classe de caractère, la séquence "\b" est interprétée comme un caractère effacer
- (backspace, hex 08). A l'extérieur d'une classe de caractères, il peut avoir
- d'autres significations (voir ci-dessous).
-
- On peut encore se servir de backslash pour préciser des types génériques de
- valeurs :
-
- \d tout caractère décimal
- \D tout caractère qui n'est pas un caractère décimal
- \s tout caractère blanc
- \S tout caractère qui n'est pas un caractère blanc
- \w tout caractère de "mot"
- \W tout caractère qui n'est pas un caractère de "mot"
-
- Chaque paire précédente définit une partition de la table des caractères :
- les deux ensembles sont disjoints. Un caractère satisfera soit un méta-caractère,
- soit l'autre.
-
- Un caractère de "mot" sera une lettre, un chiffre ou le caractère souligné,
- c'est à dire un caractère qui pourra être une partie d'un mot Perl. La
- définition des lettres et chiffres est définie par les tables de caractères de
- PCRE, et peut varier suivant la table locale de caractère (voir "Tables de
- caractères locales ", ci-dessus. Par exemple, dans la configuration français ("fr"),
- certains caractères ont des codes supérieurs à 128, pour les caractères accentués,
- et ils seront compris par le méta caractère \w.
-
- Ces séquences de caractères peuvent apparaître à l'intérieur ou à l'extérieur des
- classes de caractères. Elles remplacent à chaque fois un caractère du type
- correspondant. Si cette séquence est mis en fin de masque, et qu'il n'y a plus
- de caractère à comparer dans la chaîne sujet, la recherche échoue.
-
- La quatrième utilisation du backslash intervient lors d'assertions simples.
- Une assertion impose une condition à un certain point, sans remplacer de
- caractère. L'utilisation de sous-masques pour réaliser des assertions plus
- complexes est décrites plus bas. Les assertions avec backslash sont les
- suivantes :
-
- \b limite de mot
- \B pas limite de mot
- \A début de la chaîne sujet (indépendant du mode multi-lignes)
- \Z fin de la chaîne sujet ou nouvelle ligne à la fin de la chaîne sujet
- (indépendant du mode multi-lignes)
- \z fin de la chaîne sujet (indépendant du mode multi-lignes)
-
- Ces assertions ne peuvent pas apparaître dans une classe de caractère
- (mais "\b" a une autre signification à l'intérieur d'une classe de caractères).
- Une limite de mot est un emplacement dans la chaîne sujet ou un caractère et
- son suivant ne sont pas en même temps des caractères de mot, ou le contraire
- (on peut le voir comme \w\W ou \W\w), ou encore le premier ou le dernier
- caractère est un caractère mot.
-
- Les assertions \A, \Z, et \z diffèrent des méta caractères ^et $ dans la mesure
- oú ils ne sont pas dépendants des options, notamment PCRE_NOTBOL ou PCRE_NOTEOL.
- 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.
-
-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
- chaîne. A l'intérieur d'une classe de caractère, ^a un tout autre sens (voir
- ci-dessous).
-
- ^ n'a pas besoin d'être le premier caractère du masque, si plusieurs alternatives
- sont proposées, mais il doit être placé en premier dans chaque alternative.
- Si toutes les alternatives commencent par ^, alors le masque est dit ancré
- (il y a une autre construction qui porte cette appellation).
-
- $ est une assertion qui n'est vraie que si elle est placée tout en fin de chaîne
- ou juste avant un caractère de nouvelle ligne qui serait le dernier caractère de
- la chaîne. A l'intérieur d'une classe de caractère, ^a un tout autre sens (voir
- ci-dessous).
-
- $ n'a pas besoin d'être le dernier caractère du masque, si plusieurs alternatives
- sont proposées, mais il doit être placé en dernier dans chaque alternative. Si
- toutes les alternatives finissent par $, alors le masque est dit ancré (il y
- a une autre construction qui porte cette appellation). $ n'a pas de valeur particulière
- dans une classe de caractères.
-
- La signification de $ peut changer, de manière à l'amener à ce qu'il ne puisse se
- trouver qu'en toute fin de la chaîne sujet. Cela se fait en ajoutant l'option
- PCRE_DOLLAR_ENDONLY au moment de la compilation, ou de l'exécution. Cette option
- est inopérante sur \Z.
-
- La signification de ^ peut changer, de manière à l'amener à ce qu'il puisse se
- trouver immédiatement avant et immédiatement après un caractère de nouvelle ligne
- "\n". Cela se fait en ajoutant l'option PCRE_MULTILINE au moment de la compilation,
- ou de l'exécution. Par exemple, le masque /^abc$/ accepte la chaîne "def\nabc"
- uniquement en mode multi-lignes. Par conséquent, toutes les parties du masques qui
- commencent par "^" ne sont pas ancrées, en mode multi ligne. L'option
- PCRE_DOLLAR_ENDONLY est ignorée si l'option PCRE_MULTILINE est choisie.
-
- 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.
-
-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
- PCRE_DOTALL le point remplace n'importe quel caractère, même le caractère de
- nouvelle ligne. La gestion des points et complètement indépendante de ^et $.
- 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.
-
-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
- fermant est nécessaire à l'intérieur d'une classe de caractères, il faut qu'il
- soit le premier caractère (après un ^ éventuel) ou échappé avec un backslash.
-
- Une classe de caractère remplace un seul caractère dans la chaîne sujet, à moins
- que le premier caractère de la classe soit un ^, qui représente une négation :
- le caractère ne doit pas se trouver dans la classe. Si ^ est nécessaire dans la
- classe, il suffit qu'il ne soit pas le premier caractère, ou bien qu'il soit
- échappé avec un backslash.
-
- Par exemple, le caractère [aeiou] remplace n'importe quelle voyelle minuscule,
- tandis que [^aeiou] remplace n'importe quelle caractère qui n'est pas une voyelle
- minuscule. ^ est une notation pratique pour spécifier des caractères qui sont
- dans une classe, en ne citant que ceux qui n'y sont pas. Le comportement est
- inchangé.
-
- Avec l'option d'insensibilité à la casse, toutes les lettres d'une classe de
- caractère représentent en même temps la majuscule et la minuscule. Par exemple,
- [aeiou] représentera "A" ou "a", et [^aeiou] n'acceptera pas "A", tandis que sans
- l'option, elle l'accepterait.
-
- Le caractère de nouvelle ligne n'est pas traité de manière spéciale dans les
- classes de caractère, quelque soit l'option PCRE_DOTALL ou PCRE_MULTILINE.
- Une classe telle que [^a] acceptera toujours une nouvelle ligne.
-
- Le signe moins (-) est utilisé pour spécifier un intervalle de caractères, dans
- une classe. Par exemple, [d-m] remplace toutes les lettres entre d et m inclus.
- Si le caractère moins est requis dans une classe, il faut l'échapper avec un
- backslash, ou le faire apparaître à une position ou il ne pourra pas être
- interprété comme une indication d'intervalle, c'est à dire au début ou à la fin
- de la classe.
-
- Il n'est pas possible d'avoir le caractère "]" comme fin d'intervalle. Un masque
- tel que [W-]46] est compris comme la classe de caractère contenant deux caractères
- ("W" et "-") suivi de la chaîne littérale "46]", ce qui fait qu'il va accepter
- "W46]" ou "-46]". Cependant, si "]" est échappé avec un backslash, le masque
- [W-\]46] est interprété comme une classe d'un seul caractère, contenant un
- intervalle de caractère. La valeur octale ou hexadécimale de "]" peuvent aussi
- être utilisée pour déterminer les limites de l'intervalle.
-
- Les intervalles travaillent sur des séquences ASCII. Elles peuvent aussi être
- précisées avec des valeurs numériques, par exemple [\000-\037]. Si cet intervalle
- inclus des lettres utilisées avec une option d'insensibilité de casse, les
- majuscules ou minuscules correspondantes seront aussi incluses. Par exemple,
- [W-c] est équivalent é [][\^_`wxyzabc], avec l'option d'insensibilité de casse.
- Si la table locale de caractère est "fr", [\xc8-\xcb] correspond aux caractères
- accentués.
-
- Les types de caractères \d, \D, \s, \S, \w, et \W peuvent aussi intervenir dans
- les classes de caractères. Par exemple, [\dABCDEF] acceptera n'importe quel caractère
- hexadécimal. Un accent circonflexe peut aussi être utilisé pour spécifier adroitement
- des ensembles de caractères plus restrictifs : par exemple [^\W_] accepte toutes
- les lettres et les chiffres, mais pas les soulignés.
-
- 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.
-
-VERTICAL BAR
- La barre verticale sert à séparer des alternatives. Par exemple, dans le masque
-
-dupont|martin
-
- recherche soit "dupont", soit " martin ". Le nombre d'alternative n'est pas
- limité, et il est même possible d'utiliser la chaîne vide. Lors de la recherche,
- 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.
-
-
-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 ")".
- Les options sont
-
-i pour PCRE_CASELESS
-m pour PCRE_MULTILINE
-s pour PCRE_DOTALL
-x pour PCRE_EXTENDED
-
- Par exemple, (?im) rend le masque insensible à la casse, et multi-lignes. Il est
- possible d'annuler ces options en les faisant précéder par un signe - : par
- exemple (?im-sx), ajoutera les options PCRE_CASELESS et PCRE_MULTILINE mais
- annulera les options PCRE_DOTALL et PCRE_EXTENDED. Si une option apparaît avant
- et après le signe moins, l'option sera annulée.
-
- Le domaine d'application de ces options dépend de la position de la séquence
- d'option. Pour toutes les séquences d'options qui sont hors des sous masques
- (définis plus loin), l'effet est le même que si l'option avait été fixée dès le
- début de la recherche. Les exemples suivants se comportent tous de la même
- façons :
-
- (?i)abc
- a(?i)bc
- ab(?i)c
- abc(?i)
-
- et sont parfaitement équivalents au masque abc avec l'option PCRE_CASELESS.
- En d'autres termes, mettre des séquences d'options dans le corps principal du
- masque revient à appliquer l'option à tout le masque, sauf ordre contraire dans
- les sous masques. Si il y a plusieurs séquences d'option qui portent sur la même
- optin, la dernière s'appliquera.
-
- Si une option intervient dans un sous-masque, le comportement est différent.
- C'est un changement de comportement apparu en Perl 5.005. Une option à l'intérieur
- d'un sous masque n'affecte que cette partie du masque, ce qui fait que
-
- (a(?i)b)c
-
- acceptera abc et aBc mais aucune autre chaîne (en supposant que PCRE_CASELESS
- n'est pas utilisé). Cela signifie que les options permettent d'avoir différente
- configuration de recherche pour différentes parties du masque. Une séquence
- d'option dans une alternative affecte toute l'alternative. Par exemple :
-
- (a(?i)b|c)
-
- accepte "ab", "aB", "c", et "C", même si, comme dans le cas de "C", la première
- alternative qui porte l'option n'est pas prise en compte. Sinon, cela risque
- d'introduire des comportements très étranges :
-
- Les options spécifiques à PCRE telles que PCRE_UNGREEDY et PCRE_EXTRA peuvent
- être modifiées de la même manière, en utilisant respectivement les caractères
- 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.
-
-
-
-SUBPATTERNS
-
- 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
-
- cat(aract|erpillar|)
-
- acceptera les mots "char", "chardon", ou "charmant". Sans les parenthèses, il
- n'accepterait que "chardon", "mant" ou la chaîne vide.
-
- 2. Le sous masque est considéré comme capturante : Lorsqu'une chaîne sujet est acceptée par le masque complet, les sous masques sont transmis à l'appelant grce à un vecteur de sous masques. Les parenthèses ouvrantes sont comptées de gauche à droite, (commencant à 1).
-
- Par exemple, soit la chaîne sujet "le roi soleil " qui est utilisée avec le
- masque suivant :
-
- Le ((roi|prince) (soleil|charmant))
-
- les sous masques capturé sont "roi soleil ", "roi", et "soleil", numérotés
- respectivement 1, 2, et 3.
-
- L'ubiquité des parenthèses n'est pas toujours simple d'emploi. Il y a des
- moments oú regrouper des sous masques est nécessaire, sans pour autant capturer
- la valeur trouvée. Si une parenthèse ouvrante est suivie de "?:", le sous masque
- ne capture pas la chaîne assortie, et ne sera pas compté lors de la numérotation
- des captures. Par exemple, avec la chaîne "le prince charmant", utilisé avec le
- masque pattern
-
- Le (( ?roi|prince) (soleil|charmant))
-
- les chaînes capturées seront "prince charmant " et "charmant", numérotés
- respectivement 1 et 2. Le nombre maximal de chaîne capturées est de 99, et le
- nombre total de sous masque (capturant ou non) ne doit pas dépasser 200.
-
-
-(?i:samedi|dimanche)
-(?:(?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".
-
-REPETITION
-
- les Répétitions sont spécifiées avec des quantificateurs, qui peuvent être placés
- à la suite des caractères suivants :
-
-
- Un caractère unique, même s'il s'agit d'un méta caractère
- Une classe de caractères
- Une référence de retour (Voir section suivante)
- Un sous masque avec parenthèses (a moins que ce ne soit une assertion, voir plus
- loin)
-
- Les quantificateurs généraux précisent un nombre minimum et maximum de répétitions
- possibles, donnés par deux nombres entre accolades, et séparés par une virgule.
- Ces nombres doivent être plus petit que 65536, et le premier nombre doit être
- égal ou inférieur au second. Par exemple
-
- z{2,4}
-
- accepte "zz", "zzz", ou "zzzz". L'accolade fermante n'a pas de signification par
- elle même. Si le second nombre est omis, mais que la virgule est là, cela
- signifie qu'il n'y a pas de limite supérieure. Si le second nombre et la virgule
- sont omis, le quantificateur correspond au nombre exact de répétition attendues.
- Par exemple :
-
- [aeiou]{3,}
-
- accepte n'importe quelle succession d'au moins 3 voyelles minuscules, tandis
- que
-
- \d{8}
-
- n'accepte que 8 chiffres exactements. Une accolade ouvrante qui apparaît à une
- position oú un quantificateur n'est pas accepté, ou si la syntaxe des
- quantificateurs n'est pas respectée, elle sera considérée littérale. Par exemple,
- {,6} n'est pas un quantificateur, mais une chaîne de 4 caractères.
-
- Le quantificateur {0} est autorisé, mais l'expression est alors ignorée.
-
-* équivalent à {0,}
-+ équivalent à {1,}
-? équivalent à {0,1}
-
- Il est possible de constituer des boucles infinies en créant un sous masque
- sans caractères, mais pourvu d'un quantificateur sans limite supérieure.
- Par exemple
-
- (a?)*
-
- Les versions plus anciennes de Perl et PCRE généraient alors une erreur
- au moment de la compilation. Cependant, étant donné qu'il existe des situations
- oú ces constructions peuvent être utiles, ces masques sont désormais autorisés.
- Cependant, si la répétion du sous masque ne trouve aucun caractère, la boucle est
- interrompue.
-
- Par défaut, les quantificateurs sont "gourmands", c'est à dire, qu'ils cherchent
- d'abord à trouve le nombre maximal de répétitions qui autorise le succès de la
- recherche. L'exemple classique posé par cette gourmandise est la recherche de
- commentaire d'un programme en C. Les commentaires apparaissent entre les
- séquences /* et */ et à l'intérieur de ces délimiteurs, les * et / sont autorisés.
- Appliquer le masque
-
- /\*.*\*/
-
- à la chaîne
-
- /* first commet */ not comment /* second comment */
-
- ne peut réussir, car le masque travaille sur toute la chaîne, à cause de la
- gourmandise du caractère .*.
-
- Cependant, un quantificateur suivi d'un point d'interrogation cesse d'être
- gourmand, et au contraire, ne recherche que le nombre minimum de répétition.
- Dans ces conditions, le masque
-
- /\*.*?\*/
-
- trouvera bien les commentaires du code C. La signification des autres
- quantificateurs n'est pas changée. Attention à ne pas confondre l'utilisation du
- point d'interrogation ici avec son utilisation comme quantificateur lui même. A
- cause cette ambiguité, il peut apparaître des situations oú il faut le doubler :
-
- \d??\d
-
- Ce masque va tenter de lire un seul chiffre, mais le cas échéant, il acceptera 2
- chiffres pour permettre à la recherche d'aboutir.
-
- Si l'option PCRE_UNGREEDY est mise, (une option qui n'est pas disponible avec
- Perl) alors les quantificateurs sont non gourmand par défaut, mais peuvent être
- rendu gourmand au cas par cas, en ajoutant un point d'interrogation après. En
- d'autres termes, cette option inverse le comportement par défaut.
-
- Lorsqu'un sous masque est quantifié avec un nombre minimum de répétition, qui
- soit plus grand que 1, ou avec un maximum de répétition, le masque compilé aura
- besoin de plus de place de stockage, proportionnellement au minimum et au
- maximum.
-
- Si un masque commence par..* ou .{0,} et que l'option PCRE_DOTALL (équivalent
- en Perl à /s) est mise, c'est à dire en autorisant le remplacement des nouvelles
- lignes par un méta caractère, alors le masque est implicitement ancré, car tout
- ce qui suit va être mangé par la première séquence, et se comportera comme si le
- masque se terminait par le méta caractère \A. Dans le cas oú on sait d'avance qu'il
- n'y aura pas de caractère de nouvelle ligne, mettre l'option PCRE_DOTALL et commencer
- le masque par.* permet d'optmiser le masque. Alternativement, on peut utiliser
- ^ pour ancrer explicitement le masque.
-
- Lorsqu'un sous masque capturant est répété, la valeur capturée est la dernière.
- Par exemple, après que
-
- (inter[net]{3}\s*)+
-
-*)+
-
- ai été appliqué à "internet interne" la valeur de la chaîne capturée est
- "interne". Cependant, si il y a des sous masques imbriqués, la valeur capturée
- 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
-
-Références arrières (back references)
-
- En dehors des classes de caractères, un backslash suivi d'un nombre plus grand
- que 0 (et possiblement plusieurs chiffres) est une référence arrière (c'est à
- dire vers la gauche) dans le masque, en supposant qu'il y ait suffisamment de
- sous masques capturant précédent.
-
- Cependant, si le nombre décimal suivant le backslash est plus petit que 10, il
- sera toujours considéré comme une référence arrière, et cela générera une erreur
- si le nombre de capture n'est pas suffisant. En d'autres termes, il faut qu'il existe
- suffisamment de parenthèses ouvrantes à gauche de la référence, surtout si la
- référence est inférieure à 10. Reportez vous à la section "Backslash" pour avoir
- de plus amples détails à propos du nombre de chiffres qui suivent le backslash.
-
- La référence arrière remplace ce qui a été capturé par un sous masque dans le
- masque courant, plutôt que remplace le sous masque lui même. Ainsi
-
- (calme|rapide) et \1ment
-
- trouvera "calme et calmement " et "rapide et rapidement ", mais pas
- " calme et rapidement ". Si la recherche tiens compte de la casse, alors la
- casse de la chaîne capturée sera importante. Par exemple,
-
- ((?i)rah)\s+\1
-
- trouve "rah rah" et "RAH RAH", mais pas "RAH rah", même si le sous masque
- capturant initial ne tenait pas compte de la casse.
-
- Il peut y avoir plusieurs références arrières dans le même sous masque. Si un
- sous masque n'a pas été utilisé dans une recherche, alors les références arrières
- échoueront. Par exemple
-
- (a|(bc))\2
-
- ne réussira jamais si la chaîne sujet commence par "a" plutôt que par "bc".
-
- Etant donné qu'il peyt y avoir jusqu'à 99 références arrières, tous les chiffres
- après le backslash sont considérés comment faisant potentiellement partie de la
- référence arrière. Si le masque recherche un chiffre après la référence, alors il
- faut impérativement utiliser des délimiteurs pour terminer la référence arrière. Si
- l'option PCRE_EXTENDED est mise, on peut utiliser un espace. Sinon, un
- commentaire vide fait l'affaire.
-
- Une référence arrière qui intervient à l'intérieur de parenthèses auquel
- elle fait référence échouera dès que le sous masque sera utilisé. Par exemple,
- (a\1) échouera toujours. Cependant, ces références peuvent être utiles dans les
- sous masques répétitifs. Par exemple, le masque
-
- (a|b\1)+
-
- pourra convenir pour "a", "aba", "ababaa" etc. A chaque itération du sous masque,
- la référence arrière utilise le résultat du dernier sous masque. Pour que cela
- 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.
-
-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
- pointeur de caractères). Les assertions simples sont codées avec \b, \B, \A, \Z,
- \z, ^ et $, et sont décrite précédemment. Il existe cependant un type
- d'assertion plus complexe, codées sous la forme de sous masques. Il en existe
- deux types : ceux qui travaille au dela de la position courante, et ceux qui
- travaille en deça.
-
- \w+(?=;)
-
- Une assertion se comporte comme un sous masque, hormis le fait qu'elle ne
- déplace pas le pointeur de position. Les assertions avant commencent par (?= pour
- les assertions positives et par (?! pour des assertions négatives. Par exemple :
-
- foo(?!bar)
-
- s'assure qu'un mot est suivi d'un point virgule, mais n'inclus pas le point
- virgule dans la capture. D'autre part,
-
- (?!foo)bar
-
- en est proche, mais ne trouve pas une occurrence de "bar" qui soit précédée par
- quelque chose d'autre que "foo"; il trouve toutes les occurrences de "bar",
- quelque soit ce qui le précéde, car l'assertion (?!foo) est toujours vraie
- quand les trois caractères suivants sont "bar". Une assertion arrière est ici nécessaire.
- Ces assertions commencent par (?<= pour les assertions positives, et (?<!
- pour les assertions négatives. Par exemple :
-
- (?<!foo)bar
-
- trouve les occurrences de "bar" qui ne sont pas précédées par "foo". Le contenu
- d'une référence arrière est limité de tel façon que les chaînes qu'il utilise
- sont toujours de la même taille. Cependant, lorsqu'il y a plusieurs alternatives,
- elles n'ont pas besoin d'être de la même taille.
-
- (?<=bullock|donkey)
-
- est autorisé, tandis que
-
- (?<!dogs?|cats?)
-
- provoque une erreur de compilation. Les alternatives qui ont des longueurs
- différentes ne sont autorisées qu'au niveau supérieur des assertions arrières. C'est