Forum und email

Expressions rationnelles compatibles Perl

Introduction

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 alpha-numérique ou n'est pas un anti-slash (\). Si un délimiteur doit être utilisé dans l'expression, il faudra l'échapper avec un anti-slash. Depuis PHP 4.0.4, vous pouvez utiliser les délimiteurs (), {}, [], et <>, comme en Perl. Voir la syntaxe des masques pour plus d'explications.

Le délimiteur final peut être suivi d'options qui affecteront la recherche. Voir aussi options de recherche.

PHP supporte également les expressions rationnelles utilisant la syntaxe POSIX étendue (fonctions REGEX POSIX-extended).

Note: Cette extension maintient un cache global par thread des expressions rationnelles compilées (jusqu'à 4096).

Warning

Vous devez être conscient des limitations de PCRE. Lisez » http://www.pcre.org/pcre.txt pour plus de détails.

Pré-requis

Ces fonctions sont disponibles dans le module PHP standard, qui est toujours accessible.

Installation

À partir de PHP 4.2.0, ces fonctions sont activées par défaut. Pour les anciennes versions, vous devez configurer et compiler PHP avec l'option --with-pcre-regex afin de pouvoir les utiliser. Utilisez --with-pcre-regex=DIR pour spécifier le répertoire où la bibliothèque PCRE est installée si vous n'utilisez pas la bibliothèque incluse dans PHP. Pour les versions plus anciennes de PHP, vous devez configurer et compiler PHP avec --with-pcre-regex[=DIR] pour pouvoir utiliser ces fonctions.

La version Windows de PHP dispose du support automatique de cette extension. Vous n'avez pas à ajouter de bibliothèque supplémentaire pour disposer de ces fonctions.

Configuration à l'exécution

Le comportement de ces fonctions est affecté par la configuration dans le fichier php.ini.

Options de configuration PCRE
Nom Défaut Modifiable Changelog
pcre.backtrack_limit 100000 PHP_INI_ALL Disponible depuis PHP 5.2.0.
pcre.recursion_limit 100000 PHP_INI_ALL Disponible depuis PHP 5.2.0.
Pour plus de détails sur les constantes PHP_INI_*, reportez-vous à Directives du php.ini.

Voici un éclaircissement sur l'utilisation des directives de configuration.

pcre.backtrack_limit entier

PCRE's backtracking limit.

pcre.recursion_limit entier

Limite de récursivité PCRE. Notez que si vous définissez cette valeur à un nombre élevé, vous devriez consommer tous les processus disponibles et, éventuellement, faire crasher PHP (la taille limite de la pile imposée par le système sera atteinte).

Types de ressources

Cette extension ne définit aucune ressource.

Constantes pré-définies

Ces constantes sont définies par cette extension, et ne sont disponibles que si cette extension a été compilée avec PHP, ou bien chargée au moment de l'exécution.

Constantes PREG
Constante Description
PREG_PATTERN_ORDER Ordonne les résultats de façon à ce que $matches[0] contienne les résultats qui correspondent au masque entier, $matches[1] ceux qui correspondent à la première parenthèse capturante, $matches[2] ceux qui correspondent à la deuxième parenthèse capturante, etc. Cette constante est utilisée avec preg_match_all().
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] la deuxième, etc. Cette constante est utilisée avec preg_match_all().
PREG_OFFSET_CAPTURE Voir la description de PREG_SPLIT_OFFSET_CAPTURE. Cette constante est utilisée depuis PHP 4.3.0 .
PREG_SPLIT_NO_EMPTY Si cette option est activée, seules les sous-chaînes non vides seront retournées par preg_split().
PREG_SPLIT_DELIM_CAPTURE Si cette option est activée, les expressions entre parenthèses entre les délimiteurs de masques seront aussi capturées et retournées. Cette option a été ajoutée en PHP 4.0.5. Cette constante est utilisée avec preg_split().
PREG_SPLIT_OFFSET_CAPTURE Si cette constante est utilisée avec preg_split(), l'offset de début de résultat sera retourné, en plus de la chaîne résultat. Notez que cela change la nature du résultat retourné en un tableau contenant une chaîne à l'offset 0 et une chaîne contenant un offset à l'offset 1. Cette option est disponible depuis PHP 4.3.0.
PREG_NO_ERROR Retourné par la fonction preg_last_error() s'il n'y a pas d'erreur. Disponible depuis PHP 5.2.0.
PREG_INTERNAL_ERROR Retourné par la fonction preg_last_error() s'il y a une erreur interne PCRE. Disponible depuis PHP 5.2.0.
PREG_BACKTRACK_LIMIT_ERROR Retourné par la fonction preg_last_error() si backtrack limit a été atteint. Disponible depuis PHP 5.2.0.
PREG_RECURSION_LIMIT_ERROR Retourné par la fonction preg_last_error() si recursion limit a été atteint. Disponible depuis PHP 5.2.0.
PREG_BAD_UTF8_ERROR Retourné par la fonction preg_last_error() si la dernière erreur est du à une malformation des données UTF-8 (uniquement lors de l'exécution d'une regex en mode UTF-8). Disponible depuis PHP 5.2.0.

Exemples

Example#1 Exemples de masques valides

  • /<\/\w+>/
  • |(\d{3})-\d+|Sm
  • /^(?i)php[34]/
  • {^\s+(\s+)?$}

Example#2 Exemples de masques invalides

  • /href='(.*)' - délimiteur final manquant
  • /\w+\s*\w+/J - option 'J' inconnue
  • 1-\d3-\d3-\d4| - délimiteur initial manquant

Table of Contents

  • options de recherche — Options disponibles pour les expressions rationnelles
  • syntaxe des masques — Fonctionnement des expressions rationnelles
  • preg_grep — Retourne un tableau avec les résultats de la recherche
  • preg_last_error — Retourne le code erreur de la dernière regex PCRE exécutée
  • preg_match_all — Expression rationnelle globale
  • preg_match — Expression rationnelle standard
  • preg_quote — Échappement des caractères spéciaux des expressions rationnelles
  • preg_replace_callback — Rechercher et remplacer par expression rationnelle standard en utilisant une fonction de callback
  • preg_replace — Rechercher et remplacer par expression rationnelle standard
  • preg_split — Éclate une chaîne par expression rationnelle