8796 sujets

Développement web côté serveur, CMS

Bonjour,

J'aurais besoin d'aide pour une expression reguliere.
Voila je dois extraire un seul lien d'une page via ma page en php.
Ce lien est de type :

<a href="LIEN" class="X" rel="Y" title="Z">

Donc le plus simple je pense aurais été de faire une expression reguliere ne récupérant que le LIEN donc le a href comporte class="X" ou rel="Y" sachant que X et Y ne varie jamais alors que Z oui.

J'espere être clair Smiley smile
Modifié par wachalala (21 Jun 2009 - 10:07)
Celui-ci devrait l'affaire, dans le premier groupe tu trouveras le lien (la solution est simple : ne pas se préoccuper des attributs).
<a.*?href="(.*?)".*?>
Merci de ta réponse mais avec cette solution je vais récupérer tous les liens de la page alors que j'aimerais que ceux que la class X
Salut,
a écrit :
une expression reguliere ne récupérant que le LIEN donc le a href comporte class="X" ou rel="Y"
C'est pas vraiment très clair. Voilà comment j'interprète, personnellement :
a écrit :
une expression reguliere ne récupérant que le href du premier lien ayant soit la classe "X" , soit le rel "Y"
Et pour cela, l'expression régulière suivante devrait aller :
preg_match('/
    [#gray]# début de balise[/#]
    <a\s+
    
        [#gray]# le href, s\'il est placé avant class ou rel[/#]
        [^>]*    (?:href="([^"]*)")??    [^>]*
       
        [#gray]# class="X" ou rel="Y"[/#]
        (?:class="X"|rel="Y")
    
        [#gray]# le href, s\'il est placé après class ou rel[/#]
        [^>]*    (?:href="([^"]*)")??    [^>]*
    
    [#gray]# fin de balise et flags    [/#]
    >/sUx', $str, $matches);

Tu devrais avoir comme résultat :
- matches[0] ==> le tout premier lien html à avoir soit la classe X soit le rel Y (balise ouvrante complète)
- matches[1] ==> le contenu de son attribut href

Si jamais c'est pas ce que tu voulais, détaille plus stp et donne des exemples (des liens qui devraient passer le regex, et d'autres non).
Modifié par marcv (19 Jun 2009 - 16:11)
J'ai encore une petite question ^^
J'aurais besoin de recuperer un code EAN toujours via expression reguliere.
Voici la structure de la page :
	<li>
      <strong>Code EAN</strong>:
      9782712454223      </li>

Est ce possible ?
merci de ta réponse rapide mais ca me génére une petite erreur :

Warning: preg_match_all() [function.preg-match-all]: Delimiter must not be alphanumeric or backslash in /home/xx/domains/xxx.com/public_html/test_regex.php on line 57


et le code :

$string = file_get_contents("xxx");

$regex = 'Code EAN<\/strong>:\s*(\d+)';

preg_match_all($regex, $string, $matches); 
print '<pre>'; print_r($matches); print '</pre>'; 


La ligne 57 est celle ou il y'a le preg_match_all.

Merci Smiley smile
a écrit :
Delimiter must not be alphanumeric
Il faut bien sûr mettre la regex entre deux délimiteurs. Je ne les ai pas mis vu que tu ne les donnais pas toi-même ici (j'ai pensé que tu trouvais ça plus clair), mais bien sûr ça doit se présenter comme ça (par exemple) :
$regex = '/Code EAN<\/strong>:\s*(\d+)/';

Modifié par marcv (20 Jun 2009 - 11:34)