Problème avec preg_match

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème avec preg_match

Re: Problème avec preg_match

par sirakawa » 08 sept. 2012, 09:40

Je ne saisis pas bien ton souci car:
<?PHP
$masque = "/^\/(([a-z\d]+([-_][a-z\d]+)*)\/)*([a-z\d]+([-_][a-z\d]+)*\.[a-z\d]+)?$/i";
//chemins faux à cause de l'espace rendent faux ou 0 et un tableau vide.
$chemin = "/machin-truc/test /regexp/voyons-voir/";
$chemin = "/machin-tr uc/test/regexp/voyons-voir/";
$z =preg_match($masque, $chemin, $matchesRegexFileOrDirectoryPath);

print_r($matchesRegexFileOrDirectoryPath);
?>
Le problème que je verrais, c'est qu'avec cette fonction on ne sait pas quelle partie du chemin ne convient pas.

Problème avec preg_match

par Psylozoff » 07 sept. 2012, 21:57

Bonjour,
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!