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 pour surbrillance des "@xxx" [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 12
    Par défaut Regex pour surbrillance des "@xxx"
    Bonjour,

    Je me tourne vers vous car je ne parviens pas à trouver la bonne Regex pour mon besoin. Il s'agit de mettre en surbrillance les "@xxx" dans des commentaires (comme on a souvent l'habitude de l'écrire dans les commentaires de blogs ou dans des forums.

    Avec une chaîne d'entrée telle que :

    @le_gourou: merci pour ton commentaire
    @dave je ne suis pas d'accord

    Par exemple, j'aimerais arriver à ce résultat :

    @le_gourou: merci pour ton commentaire
    @dave je ne suis pas d'accord

    Je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $pattern = '^@(.)+\s{1}';
    $replacement = '<span style="color:red;">@\\1</span>';
    $texte = eregi_replace($pattern, $replacement, $texte);
    Mais ça ne marche pas du tout Pouvez-vous m'aider ?
    Merci à vous.

  2. #2
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Bonjour,

    Tes deux erreurs :
    - mauvais emplacement des parenthèses de capture
    - non prise en compte du caractère greedy (gourmand) des regex

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
     
    $reg = '/^(@[^\s:]+)/';
    $model = '<span style="color:red;">$1</span>';
     
    $str = "@le_gourou: merci pour ton commentaire";
    print preg_replace($reg, $model, $str);
     
    $str = "@dave je ne suis pas d'accord";
    print preg_replace($reg, $model, $str);

  3. #3
    Membre émérite Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Par défaut
    Ou bien avec les assertions ^^
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $reg = '#@[^\s]+?(?=:)#';
    $replace = '<span style="color:red;">$0</span>';
     
    print preg_replace($reg, $model, $str);

  4. #4
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Les deux points ne sont apparemment pas obligatoires, donc l'assertion peut faire rater le matching.

  5. #5
    Membre émérite Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Par défaut
    Si les : sont facultatifs effectivement, on se trouverai plus avec
    Mais ne marche pas avec "@ toto".
    Dans ce cas on aurait
    Et là, autant prendre celle donnée par s.n.a.f.u ^^

  6. #6
    Membre averti
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 12
    Par défaut
    Merci pour vos lumières, j'ai bien compris ce qui ne pouvait pas marcher.

    Cela fonctionne à présent

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

Discussions similaires

  1. regex pour comparer des dates, des chiffres, des nombres
    Par lex13 dans le forum Collection et Stream
    Réponses: 14
    Dernier message: 06/07/2007, 11h51
  2. Regex pour nettoyer des requêtes SQL
    Par gaboo_bl dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 26/03/2007, 12h03
  3. [Notepad++] utiliser regex pour remplacer des caractères
    Par ilood dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 04/02/2007, 04h06

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