Rechercher une fonction PHP

Sous-masques

Les sous-masques sont délimités par des parenthèses, et peuvent être imbriqués. Ajouter des sous-masques a deux utilités :

  1. Localiser un ensemble d'alternatives. Par exemple, le motif cat(aract|erpillar|) trouve un des mots "cat", "cataract", ou "caterpillar". Sans les parenthèses, cela trouverait "cataract", "erpillar" ou la chaine vide.

  2. Cela configure le sous-masque comme capturant. Lorsque tout le motif correspond, la portion de la sous-chaine qui correspond au sous-masque est passé à l'appelant grâce à l'argument ovector de pcre_exec(). Les parenthèses ouvrantes sont comptées depuis la gauche vers la droite (commençant à 1) jusqu'à obtenir le nombre des sous-masques capturants.

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és 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 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înes capturées est de 65535. Il ce peut qu'il soit impossible de compiler un marque aussi large, toutefois, ceci dépend des options de configuration de libpcre.

En guise de raccourci, si n'importe quelle option de configuration est requise au début des sous-masques non-capturants, les lettres d'option peuvent apparaître entre le signe "?" et le signe ":". Ainsi, les 2 masques

(?i:samedi|dimanche)
(?:(?i)samedi|dimanche)

captureront exactement les mêmes chaînes. Du fait que les branches alternatives sont testées de la gauche vers la droite, et que les options ne sont pas réinitialisées tant que le sous masque n'est pas atteint, une option de configuration d'une branche n'affecte pas les branches sous-jacentes ; ainsi, les 2 masques ci-dessus captureront "SAMEDI", mais aussi "Samedi".

Il est possible de nommer un sous-masque en utilisant la syntaxe (?P<name>pattern). Ce sous-masque sera alors indexé dans le tableau de concordance par sa position, ainsi que par son nom. PHP 5.2.2 a introduit 2 nouvelles syntaxes : (?<name>pattern) et (?'name'pattern).

Quelques fois, il est nécessaire d'avoir plusieurs correspondances en alternant les sous groupes dans une expression régulière. Normallement, chacun recevra son propre nombre de références arrières même si seulement un d'entre eux ne peut correspondre. Pour éviter cela, la syntaxe (?| permet d'autoriser les nombres dupliqués. Soit l'expression ci-après utilisée avec la chaine Sunday:

(?:(Sat)ur|(Sun))day

Ici Sunest stocké dans la référence arrière 2, alors que la référence arrière 1 est vide. La correspondance mène donc à Sat dans la référence arrière 1 alors que la référence arrière 2 n'existe pas. Changer le masque en utilisant (?| résoud ce problème:

(?|(Sat)ur|(Sun))day

Avec ce masque, à la fois Sun et Sat seront stockés dans la référence arrière 1.

Rechercher une fonction PHP

Version en cache

22/11/2024 02:21:48 Cette version de la page est en cache (à la date du 22/11/2024 02:21:48) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.

Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-regexp.reference.subpatterns.html

L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.

Références

  1. Consulter le document html Langue du document :fr Manuel PHP : http://php.net

Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.

Table des matières Haut