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

C# Discussion :

negative Regex sur des liens


Sujet :

C#

  1. #1
    Membre régulier
    Inscrit en
    Avril 2010
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 200
    Points : 111
    Points
    111
    Par défaut negative Regex sur des liens
    Bonjour à tous,

    J'ai un texte au format html en entrée contenant divers liens <a href=""></a>. Le format peut être différent dans le sens où href peut être le deuxième paramètre de a. Ainsi qu'il ne faut pas que ce soit sensible à la casse.

    J'essaie actuellement d'ajouter sur tous les liens dont le href ne commence pas par "mailto:" ou "tel:"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <a href="tel:+3300000000">+3300000000</a> // Ne doit pas contenir le target="_blank"
    <a href="mailto:toto@tata.com">toto</a> // Ne doit pas contenir le target="_blank"
    <a href="http://salut.com">salut</a> // Doit contenir le target="_blank"
    <a href="../index">salut</a> // Doit contenir le target="_blank"
    Voici mon code actuellement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    html = Regex.Replace(html,
                  @"<(a)((?!.*mailto:).*[^>]+)>",
                  "<$1 target=\"_blank\"$2>",
                  RegexOptions.IgnoreCase | RegexOptions.Compiled);
    Je n'arrive pas à faire de OU. J'ai essayé plusieurs solutions avec [..|..] et autres sans aucun succès.

    Merci par avance !

  2. #2
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 493
    Points
    5 493
    Par défaut
    Quelque chose dans ce goût là...
    (Les caractères en gras doivent être échappés et les espaces inutiles virés).

    Recherche:
    <a \s+ ((?!href)\w+="[^"]*"))? \s* (href="(?!mailto:)(?!tel:)[^"]*") \s* />


    Remplacement:
    <a $1 $2 target="_blank"/>

  3. #3
    Membre régulier
    Inscrit en
    Avril 2010
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 200
    Points : 111
    Points
    111
    Par défaut
    Bonjour,

    Merci de ta réponse.
    En exécutant ta regex tel quel, je reçois une erreur disant "trop de (", je supprime du coup la parenthèse fermante qui est en trop et la ça fonctionne, je n'ai pas d'erreur mais ça n'a pas le comportement attendu, les chaînes ne sont pas remplacées.

    J'ai testé 2-3 trucs basé sur ta regex mais soit j'ai le blank partout soit je l'ai pas...

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 677
    Points : 1 180
    Points
    1 180
    Par défaut
    Bonsoir,
    a voir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                html = Regex.Replace(html,
                  @"<a(?!.*(tel|mailto):.*)",
                  "<a target=\"_blank\"",
                  RegexOptions.IgnoreCase | RegexOptions.Compiled);

  5. #5
    Membre régulier
    Inscrit en
    Avril 2010
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 200
    Points : 111
    Points
    111
    Par défaut
    Bonjour,

    Çà a l'air de fonctionner.
    Merci à vous deux pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegEx] regex sur des dates
    Par Phiss dans le forum Langage
    Réponses: 15
    Dernier message: 24/09/2010, 18h26
  2. parentNode sur des liens, n'a pas l'air de fonctionner dans le bon sens ;)
    Par nicko_73 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 31/10/2009, 10h47
  3. [RegEx] regex sur des url
    Par joboy84 dans le forum Langage
    Réponses: 4
    Dernier message: 27/06/2008, 18h38
  4. Réponses: 1
    Dernier message: 13/05/2007, 15h34
  5. [regex] Récupérer des liens hypertextes
    Par smarties dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 15/02/2007, 19h12

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