2010-05-23 4 views
3

Dans le manuel PHP de PCRE, http://us.php.net/manual/en/pcre.examples.php, il donne 4 exemples de motifs valables:Délimiteurs PHP regex,/vs. vs {}, quelles sont les différences?

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

Semble que /, | ou une paire d'accolades peut utiliser en tant que délimiteurs, y a-t-il une différence entre eux?

+0

Je suis surpris [] et {} fonctionnent comme des délimiteurs de début/fin. Je pensais que le délimiteur de départ devait être le même que celui qui se terminait. Mais oui, vous pouvez utiliser à peu près tout ce que vous voulez. J'utilise souvent '%' comme délimiteur, car j'utilise rarement '%' comme caractère dans mes patterns. – Felix

+0

L'utilisation de délimiteurs "en forme de parenthèses" dans les paires correspondantes est, comme le concept de délimiteur lui-même, cohérente avec les littéraux regex de Perl (et probablement awk etc avant cela). – IMSoP

Répondre

3

Aucune différence, sauf que le délimiteur de fermeture ne peut pas apparaître sans s'échapper.

Ceci est utile lorsque le délimiteur standard est beaucoup utilisé, par ex. au lieu de

preg_match("/^http:\\/\\/.+/", $str); 

vous pouvez écrire

preg_match("[^http://.+]", $str); 

pour éviter d'avoir à échapper à la /.

+0

@KennyTM - Le manuel ne mentionne pas l'utilisation de [], mais il est valide, non? – powerboy

+0

Oh, je connais la réponse maintenant. "Un délimiteur peut être n'importe quel caractère non-alphanumérique, non-antislash, non-espace." - http://us.php.net/manual/fr/regexp.reference.delimiters.php – powerboy

+2

Je ne pense pas que [^ http: //.+] fonctionnerait car il correspondrait par erreur à tout caractère qui n'est pas un de h, t, p, etc. #^http: //.+# ou ~^http: //.+~ serait bien cependant. – jkasnicki

2

En fait, vous pouvez utiliser un séparateur non alphanumérique (hors et antislashs) espaces blancs

"%^[a-z]%" 

fonctionne aussi bien que

"*^[a-z]*" 

ainsi que

"!^[a-z]!" 
+0

Les espaces et les barres obliques inverses ne sont pas alphanumériques, mais ils ne sont pas autorisés en tant que délimiteur. – salathe

+0

@salathe: c'est vrai, mis à jour ma réponse – nico

Questions connexes