je rencontre actuellement un problème avec une expression régulière.
Je dois analyser un chemin pour savoir s'il est valide.
S'il est valide, je dois analyser ses différentes parties.
Je tente donc de profiter des avantages de preg_match en récupérant les parties du chemin pendant l'analyse.
Voici mon code :
$regexFileOrDirectoryPath = '/^\/(([a-z\d]+([-_][a-z\d]+)*)\/)*([a-z\d]+([-_][a-z\d]+)*\.[a-z\d]+)?$/i';
$request = '/machin-truc/test/regexp/voyons-voir/';
if (preg_match($regexFileOrDirectoryPath, $request, $matchesRegexFileOrDirectoryPath) !== 0) {
print_r($matchesRegexFileOrDirectoryPath);
exit();
}
J'obtiens ça :Array ( [0] => /machin-truc/test/regexp/voyons-voir/ [1] => voyons-voir/ [2] => voyons-voir [3] => -voir )
Donc finalement, ça à l'air de marcher, seulement, au lieu d'avoir des tableaux dans un tableau, j'ai l'impression que preg_match écrase les matchs pour ne laisser qu'une seule valeur.
Avec preg_match_all j'obtiens ça :
Array ( [0] => Array ( [0] => /machin-truc/test/regexp/voyons-voir/ ) [1] => Array ( [0] => voyons-voir/ ) [2] => Array ( [0] => voyons-voir ) [3] => Array ( [0] => -voir ) [4] => Array ( [0] => ) [5] => Array ( [0] => ) )
Des tableaux dans un tableau mais toujours uniquement le dernier élément matché pour chaque couple de parenthèses...
J'imagine qu'il y a une légère erreur dans ma regexp, seulement je n'arrive pas à la voir..!
print_r à l'air de planter aussi, il me semble que d'habitude l'affichage est mieux formaté...
Si vous avez une solution ou un avis n'hésitez surtout pas :p
Merci d'avance!