IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Regex complexe pour supprimer certains liens


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 28
    Points : 26
    Points
    26
    Par défaut Regex complexe pour supprimer certains liens
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Vous pouvez faire comme ça.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $p='\bhref\s*=\s*(")http:\/\/www\.domain\.tld[\s\S]*?(")';
    $pattern='#(<a\s+[\s\S]*?)('.$p.')([\s\S]*?>)#';
    $out=preg_replace($pattern, '${1}${5}', $content);
    J'ai mis (") dans un sous-groupe pour qu'on puisse généraliser au temps futur parce que technologiquement parlant il ne serait pas forcément ("), un simple (') est valable equalement. Ça a un effet sur le comptage $5 (si vous ne voyez pas immédiatement). Aussi, on peut faire des trucs peut-être plus avancés, mais la base c'est ça.

  3. #3
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Tu peux faire comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php
    $subject = <<<'LOD'
    Lorem ipsum dolor sit amet, consectetur <a class="style1" href="http://www.domain.tld/">
    adipisicing elit,</a> sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
    Ut enim ad <a href= domain.tld>minim veniam</a>, quis nostrud exercitation ullamco laboris
    nisi ut aliquip <a href = 'www.domain.tld/user?id=2714'>ex <span>ea</span> commodo</a>
    consequat.
    LOD;
     
    $pattern = <<<'LOD'
    ~
        <a\b                                           # début de la balise "a" ouvrante
        (?> [^>h]++ | \Bh | h(?!ref \s*+ =) )*+        # contenu jusqu'à l'attribut href
        href \s*+ = \s*+ ["']?+                        # attribut href
        (?> http:// )?+ (?> www\. )?+ domain\.tld \b   # début de contenu de l'attribut
        [^>]*+ >                                       # fin de la balise ouvrante
        ( (?> [^<]++ | <(?!/a>) )*+ )                  # texte du lien
        </a>                                           # balise fermante
    ~ix
    LOD;
     
    $result = preg_replace($pattern, '$1', $subject);
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

Discussions similaires

  1. [PPT-2007] Macro VBA pour supprimer plusieurs liens hypertextes en même temps
    Par thp67 dans le forum VBA PowerPoint
    Réponses: 0
    Dernier message: 28/10/2014, 18h23
  2. Réponses: 0
    Dernier message: 28/10/2014, 15h13
  3. [SP-2007] Assistance pour supprimer le lien "Tout le contenu du site" et le fil de navigation
    Par sophieetfrederic dans le forum SharePoint
    Réponses: 1
    Dernier message: 18/12/2012, 11h31
  4. Lien pour supprimer un fichier
    Par davelop dans le forum ASP.NET
    Réponses: 4
    Dernier message: 20/03/2008, 14h40
  5. [RegEx] regex pour supprimer l'indentation du code
    Par cassy dans le forum Langage
    Réponses: 7
    Dernier message: 27/08/2007, 14h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo