Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1531 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  probleme de regexp

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme de regexp

n°1674354
patastronc​h
Posté le 21-01-2008 à 12:57:34  profilanswer
 

Bonjour,
 
j'ai un petit soucis.
 
J'ai fait le pattern suivant pour parser une adresse dailymotion :

Code :
  1. http://(?:www.|)dailymotion.com/(?:.*?)video/([a-z0-9]{1,8})(?:.*?)


 
Ainsi je devrait récupérer dans $1 la partie ([a-z0-9]{1,8}) lors d'un replace.
 
Or quand je test sur une adresse uelconque comme :

Code :
  1. http://www.dailymotion.com/fr/cluster/auto/featured/video/x4056d_wald-w216-give-some-serious-attitud_auto


 
$1 contien non pas x4056d come voulu, mais x4056d_wald-w216-give-some-serious-attitud_auto.
 
Je tourne en rond depuis une bonne heure dessus, si quelqu'un sait comment regler ce probleme je lui en serait reconnaissant :)
 
Quand on a un probleme qui demande a etre resolu par des regexp alors on en a 2. Je sais plus qui a dit ca mais je commence a le croire :)
 
Merci d'avance !
 


Message édité par patastronch le 21-01-2008 à 13:00:42
mood
Publicité
Posté le 21-01-2008 à 12:57:34  profilanswer
 

n°1674363
anapajari
s/travail/glanding on hfr/gs;
Posté le 21-01-2008 à 13:25:39  profilanswer
 

Ta regex est correcte et remonte ce qu'il faut, fais voir le code php que tu utilises pour récupérer ton truc.

n°1674364
patastronc​h
Posté le 21-01-2008 à 13:29:34  profilanswer
 

Voila le code exact écrémé des choses innutiles.
 

Code :
  1. $str="http://www.dailymotion.com/fr/cluster/auto/featured/video/x4056d_wald-w216-give-some-serious-attitud_auto";
  2. $pattern='#http://(?:www\.|)dailymotion\.com/(?:.*?)video/([a-z0-9]{1,8})(?:.*?)#';
  3. if(preg_match($pattern, $str)>0) echo preg_replace($pattern,'$1', $str);


 
Ca m'affiche : x4056d_wald-w216-give-some-serious-attitud_auto


Message édité par patastronch le 21-01-2008 à 13:30:13
n°1674397
anapajari
s/travail/glanding on hfr/gs;
Posté le 21-01-2008 à 14:10:44  profilanswer
 

oui bon en fait tu as juste une petite erreur sur ta regex. C'est le dernier morceau qui va pas:  

([a-z0-9]{1,8})(?:.*?)


Comme tu l'as mis en non-greedy ( le ? ) est bien il s'arrête juste après ton motif $1.
Deux solutions:
- enlever le greedy

([a-z0-9]{1,8})(?:.*)


- le forcer à aller jusqu'à la fin de la ligne:

([a-z0-9]{1,8})(?:.*?)$


 
Maintenant la vrai question c'est pourquoi n'utilises tu pas le resultat du preg_match plutôt???
un truc dans le genre:

Code :
  1. preg_match($pattern, $str, $matches);
  2. print $matches[1];:

n°1674422
patastronc​h
Posté le 21-01-2008 à 14:22:31  profilanswer
 

Un grand merci pour ta réponse. Tes deux méthodes foncitonnent parfaitement et je comprends meme pouruqoi ca marchait pas maintenant.  
 
Quant au pourquoi j'utilise pas le resultat renvoyé par preg_match , y en a aucune. En fait je débute dans l 'utilisation des regexp et je fais les choses comme je les comprends pour l'instant. Je vais regarder plus en detail ce que peut apporter l'utilisation direct du du resultat renvoyé par preg_match.


Message édité par patastronch le 21-01-2008 à 14:22:57

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  probleme de regexp

 

Sujets relatifs
Problème FirefoxProblème de regexp en JS
probleme requete REGEXPPHP-SQL Problème avec REGEXP
Problème avec les regexp...[JS] Probleme de RegExp
[PHP] Regexp : problème pour exclure une chaineBesoin d'un pro? : Problème de regexp (résolu)
[PhP - RegExp] pitit probleme de quotes[php] probleme classique de forum : pros des regexp demandés!
Plus de sujets relatifs à : probleme de regexp


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR