Un regex qui marche pas :(

kangoo75 Messages postés 47 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 28 mai 2008 - 14 juin 2007 à 22:37
kangoo75 Messages postés 47 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 28 mai 2008 - 15 juin 2007 à 22:26
Bonjour , je suis un peut nul en Regex et j'ai bidouillé un script mais
qui marche pas afin de récuperer la note , les commentaires positif et
négatif , le nom et la date de chaque commentaire , voici mon code
(pouvez vous m'aider?)

Merci


----------------------------------------------------------------

5 réponses

DiGhan Messages postés 239 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 3 juin 2010 1
15 juin 2007 à 12:49
Salut,

pour pouvoir capturer des données au sein d'une regex, il faut faire appel aux parenthèses capturantes (absentes dans ton masque). Par exemple :

<?php

$string = 'capturez-moi';
$pattern = '#([a-z]+)-([a-z]+)#i';
preg_match_all($pattern,$string,$matches,PREG_SET_ORDER);
echo '',print_r($matches),'

';

?>
0
cs_garfield90 Messages postés 388 Date d'inscription lundi 7 juillet 2003 Statut Webmaster Dernière intervention 10 février 2009
15 juin 2007 à 16:16
Pourquoi faire une regex pour ca ?
normalement, logiquement, tu as stocké ces informations quelques part ( XML, BDD, autres) et la récupérer les infos se fait d'une maniere beaucoup plus triviale.

Sinon, si ton code est bien formé, ton HTML => XML, tu utilises alors le modele DOM ou SimpleXML pour récuperer les informations, cas relativement simple.

Enfin, si tu veux t'amuser avec les expressions rationnelles, regardes ton pattern et aussi des tutos, et tu verras une des raisons pour lesquelles ca marche pas.

Ensuite construit ta regex au fur et a mesure, ou fait en plusieurs (chacune récupérant l'information souhaitée)

"They are 10 sorts of persons those understanding binary and those not"
0
kangoo75 Messages postés 47 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 28 mai 2008
15 juin 2007 à 17:31
ok merci, j'ai reussi à bidouiller un truc qui marche :
preg_match_all('#
.*(.*)
.*\+<\/span>(.*)-<\/span>(.*)<\/div>.*(.*)<\/strong>.*-(.*)<\/div>#misU', $texte, $matches, PREG_SET_ORDER);

Par contre lorsque par exemple       "  - Accueil pas agréable  " ou         " +   j\'adore la déco" est absent, le regex ne marche plus , comment faire pour résoudre ce probleme?

Note : je dois récuperer les infos d'une page web distante

Merci
0
DiGhan Messages postés 239 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 3 juin 2010 1
15 juin 2007 à 21:21
Utilise la clause '?' qui indique une ou aucune fois la séquence qui précède. Exemple :

<?php

$pattern = '#(?:-<\/span>(.*)<\/div>)?#';
preg_match_all($pattern,$string,$matches,PREG_SET_ORDER);




?>

NB : la séquence (?:...) indique qu'on ne souhaite pas capturer les données entre ces parenthèses.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kangoo75 Messages postés 47 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 28 mai 2008
15 juin 2007 à 22:26
alors la merci à tous ! ca marche nikel maintenant ! je met le regex final (ca peux servir à d'autre) :

preg_match_all('#
.*(.*)
.*(?:\+<\/span>(.*))?(?:-<\/span>(.*))?<\/div>.*(.*)<\/strong>.*-(.*)<\/div>#misU', $texte, $matches, PREG_SET_ORDER);
0