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 :

Capture d'une chaine uniquement si pas entre 2 balises (référence avant et arrière)


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Femme Profil pro
    fdghfdgh
    Inscrit en
    Août 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : fdghfdgh

    Informations forums :
    Inscription : Août 2009
    Messages : 22
    Points : 17
    Points
    17
    Par défaut Capture d'une chaine uniquement si pas entre 2 balises (référence avant et arrière)
    Bonjours,
    Je me suis un peu documenté sur les références avant et arrière mais cela ne semble pas suffire au cas qui me pose problème.

    Je dois mettre en italique (bbcode) un string si et seulement si elle ne l'est pas déjà.
    Ça peut paraître simple mais l'application ne l'est pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Je suis une belle string en métal
    => On remplace "string" par [italique]string[/italique]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Je suis une belle [italique]string[/italique] en métal
    => On ne fait rien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [italique]Je suis une belle string en métal[/italique]
    => On ne fait rien
    C'est ce dernier cas qui me pose problème.

    Ma regex est pour l'instant #(?<!\[italique\]).*(string).*(?!\[/italique\])#im ce qui ne convient pas.
    Merci

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    tu doit mettre les .* en ungreddy .*?

  3. #3
    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 : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

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

    On peut effectivement faire des look around très classes, mais il y a parfois des solutions simples :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $reg = '#\[italique\].*string.*\[/italique\]#im';
    if (!preg_match($reg, $str)) {
        $str = str_replace('string', '[italique]string[/italique]', $str);
    }
    Il me semble que c'est suffisant et cela a de fortes chances d'être plus performant.

  4. #4
    Membre à l'essai
    Femme Profil pro
    fdghfdgh
    Inscrit en
    Août 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : fdghfdgh

    Informations forums :
    Inscription : Août 2009
    Messages : 22
    Points : 17
    Points
    17
    Par défaut
    Dans ce cas là ça coince pour ce cas:
    Je suis une belle string en métal. Je suis une belle [italique]string[/italique] en métal.

    [italique]Je suis une belle string en métal[/italique]
    (désolé de ne pas avoir été assez clair )

Discussions similaires

  1. Réponses: 6
    Dernier message: 19/11/2013, 03h52
  2. Réponses: 1
    Dernier message: 19/07/2013, 00h08
  3. Réponses: 1
    Dernier message: 06/08/2008, 12h33
  4. [RegEx] Recherche de données qui ne sont pas entre des balises
    Par Space Cowboy dans le forum Langage
    Réponses: 6
    Dernier message: 12/07/2007, 19h03

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