Nommer les groupes dans un regexp

ViPHP
ViPHP | 5462 Messages

09 juil. 2010, 17:10

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:

ViPHP
ViPHP | 4039 Messages

10 juil. 2010, 11:03

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
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

ViPHP
ViPHP | 3300 Messages

10 juil. 2010, 15:03

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 :)
Fait du php depuis que ca existe ou presque :)

ViPHP
ViPHP | 5462 Messages

10 juil. 2010, 16:19

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: