Délimiteurs
Lors de l'utilisation des fonctions PCRE, il est nécessaire que le motif soit encadré
par des délimiteurs. Un délimiteur peut être n'importe quel caractère
non alpha-numérique autre qu'un backslash ou qu'un espace.
Les caractères d'espacement blanc avant un délimiteur valide sont silencieusement ignoré.
Les délimiteurs les plus courants sont les slashes (/
), dièses
(#
) et les tildes (~
). Les exemples suivants ont
tous des motifs encadrés avec des délimiteurs valides.
Il est également possible d'utiliser les délimiteurs utilisant les crochets
où les crochets ouvrants et fermants sont respectivement les délimiteurs de
début et de fin. ()
, {}
,
[]
and <>
sont tous des styles
de crochets valides.
Les délimiteurs utilisant les crochets n'ont pas besoin d'être échappés lorsqu'ils
sont utilisés comme caractères méta dans un masque, mais, comme tout autre opérateur,
ils doivent être échappés s'ils sont utilisés comme caractères littéraux.
Si le délimiteur doit être décrit dans le motif, il doit être échappé avec un backslash.
Si le délimiteur apparait souvent dans le motif, choisir un autre délimiteur est une bonne
idée pour en augmenter la lisibilité.
La fonction
preg_quote() peut être utilisée pour échapper une chaine
et l'utiliser dans un motif. Son second paramètre optionnel sert à spécifier le délimiteur
qui doit être échappé.
Vous pouvez aussi utiliser des
modificateurs de motif après le délimiteur final. L'exemple suivant montre
une correspondance insensible à la casse.
Pedro Gimeno ¶9 years ago
Note that bracket style opening and closing delimiters aren't a 100% problem-free solution, as they need to be escaped when they aren't in matching pairs within the expression. That mismatch can happen when they appear inside character classes [...], as most meta-characters lose their special meaning. Consider these examples:
<?php
preg_match('{[{]}', ''); preg_match('{[}]}', ''); preg_match('{[}{]}', ''); ?>
Escaping them solves it:
<?php
preg_match('{[\{]}', ''); preg_match('{[}]}', ''); preg_match('{[\}\{]}', ''); ?>
Revo ¶6 years ago
Note that angle brackets `<>` shouldn't be used as delimiters whenever you will have to invoke advanced clusters like atomic groups or lookbehinds because their including angle bracket doesn't come in pair and escaping doesn't help either.
Munin ¶9 years ago
preg_match('{[}]}', ''); // Warning: preg_match(): Unknown modifier ']'
preg_match('{[\}]}', ''); // OK