Expression reguliere récuperer ses backlinks

WRInaute discret
Hello,
J'ai réalisé il y a quelques temps un petit script qui me permet d'aller vérifier si mes BL sont bien présents chez mes partenaires.
Je souhaite le faire évoluer en récupérant l'ancre du lien (ou le code du lien en entier) sauf que je n'ai jamais été très avec les expressions régulières.

J'ai tenté quelque chose comme ceci pour parer à toutes les éventualité (attribut target rel etc...)

Code:
$lien='|<a href=(.*)'.$url.'(.*)</a>|'; 
preg_match($lien,$mystring,$out,PREG_PATTERN_ORDER);

Sans succès... ça me sort des trucs bizarres ... plusieurs liens en même temps parfois (par ce que la balise </a> est collé au reste du code - pas d'espace)
Si un crack des ER est dans le coin :)
Merci
 
WRInaute accro
Faudrait que tu collecte les liens que tu risque de rencontrer car c'est difficile de répondre sans voir les cas.
en tous cas moi je partirait vers un truc qui cherche entre ton nom de domaine (ou url) et la fermante </a> en limitant le nombre de caractère pour éviter de choper plusieurs liens.

Un truc du genre "#$url.{1,100}</a#si" ("si" pour être indépendant de la casse et passer les éventuels saut de ligne / caractère spéciaux)
Un fois le motif appliqué et la chaine récupéré je ferait un second traitement pour se débarrasser du "</a" final et ensuite un autre pour dégager tout ce qui est avant le ">" qui se trouve fatalement devant l'anchor que tu cherche.
Pour quoi cette approche fractionnée ? > car tu va fatalement avoir des target truc, class machin, href en début ou en fin etc ... Les deux seuls constantes c'est la fermante de lien et l'url.

D'ailleurs je me demande si il y a pas moyen d'extraire tout depuis l'url jusqu’à "<" en excluant justement "<" (ce qui éviterait de devoir présumer une taille) genre : "#$url[.^<]#si"
 
WRInaute discret
Salut Zeb,
merci pour ton retour.
J'ai continué à travailler après avoir poster ... et j'arrive plus au moins à quelque chose qui ressemble à ce que tu propose ( en beaucoup moins bien).
Je vais corriger et continuer de coder en suivant tes remarques.
Merci encore
 
WRInaute accro
C'est un peu useless de checker comme ça:
PHP:
<span class="syntaxdefault"><br /></span><span class="syntaxkeyword"><!--<br /><</span><span class="syntaxdefault">a&nbsp;href</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"http://example.com/"</span><span class="syntaxkeyword">></span><span class="syntaxdefault">Example</span><span class="syntaxkeyword"></</span><span class="syntaxdefault">a</span><span class="syntaxkeyword">><br />--><br />&nbsp;</span><span class="syntaxdefault"></span>
 
WRInaute accro
Voici ce que j'utilise pour extraire le title d'une page :

Code:
                         //recherche du titre sans tenir compte de la casse
         if (eregi("<title>(.*)</title>",$page,$regs))
            { $title = $regs[1];

                         //il arrive qu'il ne s'arrete pas au </title> va savoir pourquoi. on le recherche à la mimine
              $title2 = strtolower($title);
              $pos1 = strpos($title2,"</title>");
              if ($pos1 > 0) {
                  $title = substr($title, 0 , $pos1);
                  }
            }

Je suppose qu'on peut facilement l'adapter à un lien dont on connait l'url pour trouver l'ancre.

exemple non testé (je me suis peut-être planté dans le code, c'est juste pour donner des pistes) :

Code:
                         //recherche du l'ancre d'un lien
         if (eregi("<a (.*)".$url."(.*)>(.*)</a>",$page,$regs))
            { $ancre = $regs[3];

                         //il arrive qu'il ne s'arrete pas au </a> va savoir pourquoi. on le recherche à la mimine
              $ancre2 = strtolower($ancre);
              $pos1 = strpos($ancre2,"</a>");
              if ($pos1 > 0) {
                  $ancre = substr($ancre, 0 , $pos1);
                  }
            }
 
WRInaute accro
il arrive qu'il ne s'arrete pas au </a> va savoir pourquoi. on le recherche à la mimine
Regarde si tu as pas des caractère spéciaux genre saut de ligne ou tabulation qui viennent foutre le bronx dans le motif dans ces moments là.
Sinon attention la famille "ereg" est asbeen tu devrais penser "preg" pour l'avenir.
 
Discussions similaires
Haut