Page 1 sur 1

Nommer les groupes dans un regexp

Posté : 09 juil. 2010, 17:10
par stealth35
C'est pas toujours pratique lors d'un preg_match que les clés sois numérique par exemple
$date = '2010-07-09 16:45:37';
$reg  = '/^(\d{4})-(\d{2})-(\d{2})\s(\d{2}):(\d{2}):(\d{2})$/';
	
preg_match($reg, $date, $matches);
	
print_r($matches);

Code : Tout sélectionner

Array ( [0] => 2010-07-09 16:45:37 [1] => 2010 [2] => 07 [3] => 09 [4] => 16 [5] => 45 [6] => 37 )
récupérer l'heure via $match[4] n'est pas forcement aisé, et visible en 1 coup d'oeil.

Mais, grâce à l'option d'assertion P, on peux nommer un groupe en faisant (?P<lenomdegroup>pattern)
	
$date = '2010-07-09 16:45:37';
$reg  = '/^(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})\s(?P<hour>\d{2}):(?P<minute>\d{2}):(?P<second>\d{2})$/';
	
preg_match($reg, $date, $matches);
	
print_r($matches);

Code : Tout sélectionner

Array ( [0] => 2010-07-09 16:45:37 [year] => 2010 [1] => 2010 [month] => 07 [2] => 07 [day] => 09 [3] => 09 [hour] => 16 [4] => 16 [minute] => 45 [5] => 45 [second] => 37 [6] => 37 )
maintenant c'est plus simple de faire $matches['hour']

:wink:

Re: Nommer les groupes dans un regexp

Posté : 10 juil. 2010, 11:03
par Berzemus
A propos, depuis Php5.2.2 il existe deux écritures supplémentaires:

(?<nom>pattern)
et
(?'nom'pattern)

http://www.php.net/manual/fr/regexp.ref ... tterns.php

Re: Nommer les groupes dans un regexp

Posté : 10 juil. 2010, 15:03
par Nagol
si je puis me permettre dans l'exemple de date, utiliser un regexp c'est juste mal, les explode ou un strtotime feront un bien meilleur job ici :)

Re: Nommer les groupes dans un regexp

Posté : 10 juil. 2010, 16:19
par stealth35
si je puis me permettre dans l'exemple de date, utiliser un regexp c'est juste mal, les explode ou un strtotime feront un bien meilleur job ici :)
oui c'était juste pour l'exemple :wink: