1. ⭐⭐⭐ Grosse PROMO en cours sur ma plateforme SEO My Ranking Metrics
    Rejeter la notice

[PHP] Regex Complexe

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par didier26, 29 Octobre 2013.

  1. didier26
    didier26 WRInaute discret
    Inscrit:
    1 Octobre 2009
    Messages:
    59
    J'aime reçus:
    0
    Bonjour,

    je monte un script qui me permet de supprimer d'un site tous les liens sortants vers un NDD domain.tld

    j'ai tenté la regex suivante :

    Code:
    preg_match('#<a.*?href=\"http:\/\/www.domain.tld.*?\".*?>(.*?)<\/a>#', $content, $out);
    Pourquoi le premier .*? ???

    Pour pouvoir gérer les cas où l'attribut title ou class du lien est placé entre le <a et le href.

    Tout marche bien sauf dans les textes où plusieurs liens sont présents, car le premier .*? me prend tout le code compris entre l'ouverture du premier <a et le href du dernier lien vers domain.tld

    Je bloque depuis hier. Merci pour votre aide.
     
  2. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 196
    J'aime reçus:
    1
    >[.^<]<\/a>

    tout sauf "<" pour l'anchor ?
     
  3. didier26
    didier26 WRInaute discret
    Inscrit:
    1 Octobre 2009
    Messages:
    59
    J'aime reçus:
    0
    ça me renvoie rien ...
     
  4. didier26
    didier26 WRInaute discret
    Inscrit:
    1 Octobre 2009
    Messages:
    59
    J'aime reçus:
    0
    ou alors faire après le premier <a un masque du type : tout sauf <a, ce qui prendra uniquement la dernière balise a ouvrante.

    Mais je n'arrive pas à l'écrire
     
  5. Blount
    Blount WRInaute impliqué
    Inscrit:
    18 Novembre 2010
    Messages:
    707
    J'aime reçus:
    0
    Pourquoi autant d'anti-slashes ? Pas besoin d'en mettre devant les guillements ni les "/".
    Par contre, il en faut devant les points à considérer comme un caractère.
    J'utiliserai les options suivantes :
    "U" pour le coté non gourmand
    "m" pour le multi lignes (il peut y avoir des retours à la ligne entre les attributs et dans le contenu texte du lien.
    "i" pour la casse : href peut être écrit HREF parfois ou encore les balise en majuscule.
    "s" pour que le "." puisse prendre les retours à la ligne.
    Je te propose cette RegExp (avec d'autre "correction") :
    PHP:
    <span class="syntaxdefault">preg_match</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'#<a.+href="http://www\.domain\.tld[^"]*"[^>]*>(.*)</a>#Umis'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $content</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $out</span><span class="syntaxkeyword">);</span><span class="syntaxdefault"> </span>
     
  6. didier26
    didier26 WRInaute discret
    Inscrit:
    1 Octobre 2009
    Messages:
    59
    J'aime reçus:
    0
    Merci de ton coup de main

    ta solution ne me renvoie rien
     
  7. Blount
    Blount WRInaute impliqué
    Inscrit:
    18 Novembre 2010
    Messages:
    707
    J'aime reçus:
    0
    J'ai fais des corrections dans mon précédents messages. Regarde si tu as bien la dernière version de la RegExp.
     
  8. didier26
    didier26 WRInaute discret
    Inscrit:
    1 Octobre 2009
    Messages:
    59
    J'aime reçus:
    0
    oui même avec la dernière
     
  9. Blount
    Blount WRInaute impliqué
    Inscrit:
    18 Novembre 2010
    Messages:
    707
    J'aime reçus:
    0
    Ça nous aide pas vraiment.
    Chez moi, mon test fonctionne très bien :
    PHP:
    <span class="syntaxdefault"></span><span class="syntaxkeyword"><?</span><span class="syntaxdefault">php<br />$content </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">'fgdfjg fgdsfg<br />fdgsdg<br />gdfgg<br /><br />fgdg<br /><a href="http://www.domain.tld/test">dsfs<br />fsdf<br />sdf</a><br />sdfds<br />'</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">preg_match</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'#<a.+href="http://www\.domain\.tld[^"]*"[^>]*>(.*)</a>#Umis'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $content</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $out</span><span class="syntaxkeyword">);<br /><br /></span><span class="syntaxdefault">var_dump</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$out</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault"> </span>
    Code:
    array(2) {
      [0] =>
      string(54) "<a href="http://www.domain.tld/test">dsfs\nfsdf\nsdf</a>"
      [1] =>
      string(13) "dsfs\nfsdf\nsdf"
    }
    
    Tu as cherché d'où pourrait venir l'erreur ?

    Sinon, pour le coté remplacement, il faudra regarder du coté de preg_replace.
     
  10. didier26
    didier26 WRInaute discret
    Inscrit:
    1 Octobre 2009
    Messages:
    59
    J'aime reçus:
    0
    en fait comme expliqué plus haut

    il faut donc tester avec un content de ce type :

    Code:
    le début de mon texte blabla vkd <a title="Info France" href="http://www.autre_domaine.tld/" target="_blank"><strong>anchor 1</strong></a> en 2009, ce sera aussi et essentiellement superviser la fin des travaux, avec des  <a title="title bulldozer" href="http://www.domain.tld/bulldozer.php" target="_blank"><strong>bulldozers</strong></a> ma fin de mon texte blabla
     
  11. Blount
    Blount WRInaute impliqué
    Inscrit:
    18 Novembre 2010
    Messages:
    707
    J'aime reçus:
    0
    Mouais, il manque juste un [^>] dans la RegExp.
     
  12. didier26
    didier26 WRInaute discret
    Inscrit:
    1 Octobre 2009
    Messages:
    59
    J'aime reçus:
    0
    super merci bcp
     
Chargement...
Similar Threads - [PHP] Regex Complexe Forum Date
[PHP] Question technique Regex Développement d'un site Web ou d'une appli mobile 28 Juillet 2012
[PHP] Comment valider une regexp Développement d'un site Web ou d'une appli mobile 9 Juin 2010
[PHP] Ajouter une exception dans une regex Développement d'un site Web ou d'une appli mobile 10 Mai 2010
[PHP] REGEX pour dire OU Développement d'un site Web ou d'une appli mobile 8 Septembre 2009
[PHP] Détecter le navigateur / bot en fonction du HTTP_USER_AGENT Développement d'un site Web ou d'une appli mobile 14 Septembre 2019
[PHP] Détecter le navigateur / bot en fonction du HTTP_USER_AGENT Développement d'un site Web ou d'une appli mobile 12 Janvier 2017
[PHP] Cookie vide dans une fonction, complet juste avant ou après Développement d'un site Web ou d'une appli mobile 25 Novembre 2014
[php] Cookie d'un domaine vers un sous-domaine Développement d'un site Web ou d'une appli mobile 29 Août 2014
[PHP]Cci mails Développement d'un site Web ou d'une appli mobile 18 Août 2014
[PHP] gethostbyname Développement d'un site Web ou d'une appli mobile 15 Février 2014
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice