Regex niquel mais qui ne fonctionne pas...

Eléphant du PHP | 78 Messages

09 mars 2008, 12:27

Bonjour tout le monde :)

J'ai ce bout de texte-là (sur une seule ligne, pas de retour à la ligne) :
<h4>Genre : <a href="/film/alaffiche_genre_gen_genre=13024&genretxt=Romance.html" class="link1">Romance</a>, <a href="/film/alaffiche_genre_gen_genre=13005&genretxt=Com%E9die.html" class="link1">Comédie</a></h4></div><div style="padding: 2 0 2 0;"><h4>Durée : 2h 10min.&nbsp;</h4>
Et je voudrais récupérer les genres grâce à cette regex :
$motif = '#<h4>Genre : (.*)</h4></div><div style="padding: 2 0 2 0;"><h4>Durée : #';

// $this->fiche_out étant le texte cité ci-dessus
preg_match($motif, $this->fiche_out, $res);
Or, un print_r($res); me renvoit un tableau vide...pourtant il me semble que je ne me suis pas planté dans la regex :(

Si quelqu'un peut m'aider.. merci ;)

ViPHP
ViPHP | 5924 Messages

09 mars 2008, 13:31

Essaye en rajoutant l'option de non gourmandise au pattern : U

ViPHP
ViPHP | 3607 Messages

09 mars 2008, 13:48

Bonjour,
un petit outil en ligne pour tester tes regexp facilement:
http://www.lumadis.be/regex/test_regex.php?lang=fr
j'ai pas essayer par contre de résoudre ta réegexp, peut-être cet aprem ;)

Mammouth du PHP | 505 Messages

09 mars 2008, 15:49

la regex match ton exemple c'est donc probablement $this->fiche_out qui ne contient pas l'équivalent de ton exemple

Eléphant du PHP | 78 Messages

09 mars 2008, 16:54

Merci pour vos réponses.
En effet avec l'outil en ligne (merci) ça passe... je vais checker ça je vous tient au courant ;)

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Eléphant du PHP | 78 Messages

09 mars 2008, 17:15

J'ai fait un var_dump($this->fiche_out), copier le bout de code qui m'intéressait : via l'outil en ligne ça catch bien, mais via PHP toujours pas... donc le texte est bien présent mais je vois pas ce qui colle pas :?

Voici le code :
$motif = '#<h4>Genre : (.*)</h4></div><div style="padding: 2 0 2 0;"><h4>Durée : #';

// On vire les retours à la ligne
$this->fiche_out = str_replace("\n", '', $this->fiche_out);
$this->fiche_out = str_replace("\r", '', $this->fiche_out);

preg_match($motif, $this->fiche_out, $res);

print_r($res);
var_dump($this->fiche_out);
[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

ViPHP
ViPHP | 3607 Messages

09 mars 2008, 17:24

preg_match_all() ?

Eléphant du PHP | 78 Messages

09 mars 2008, 17:29

Non preg_match_all(); ne change rien (de toute façon ma chaîne était sur une seule ligne) ;)

ViPHP
ViPHP | 1380 Messages

09 mars 2008, 18:07

Problème de locales?

Que donne:
echo (int) preg_match('#é#', 'école');
ripat

Eléphant du PHP | 78 Messages

09 mars 2008, 18:15

Problème de locales?

Que donne:
echo (int) preg_match('#é#', 'école');
Ca me donne 1 :(
C'est vraiement imcompréhensible je suis dessus depuis des heures et je trouve pas... PHP quand tu nous tient :roll:

ViPHP
ViPHP | 1380 Messages

09 mars 2008, 18:21

Et si tu rajoutes l'option s?
$motif = '#<h4>Genre : (.*)</h4></div><div style="padding: 2 0 2 0;"><h4>Durée : #s';
ripat

Eléphant du PHP | 78 Messages

09 mars 2008, 18:25

Non s ne change rien.. mais c'est bien U qui a fonctionné ;)
Merci tout le monde et en particulier Sékiltoyai :)

Eléphanteau du PHP | 18 Messages

13 mars 2008, 13:52

Petite note: tu peux écrire (.*?) pour remplacer le flag U localement, ça fonctionne pareil.

ViPHP
ViPHP | 4039 Messages

13 mars 2008, 14:26

Il y a aussi le fait que preg_match et autres ne semblent fonctionner qu'en UTF8.

Donc un petit utf8_encode sur chaîne avant traitement par regex pourrait mieux résoudre le problème.

Le fait que ça marche sans est qu'un caractère accentué non converti en utf8 se fait valider par à peu près tout, donc dans la plupart des cas ça passe..
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphant du PHP | 78 Messages

13 mars 2008, 16:35

Je prend note merci à vous deux ;)