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 :

Equivalent de l'accent circonflexe pour les chaines ? [RegEx]


Sujet :

Langage PHP

  1. #1
    Inscrit
    Profil pro
    aaaaa
    Inscrit en
    Novembre 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : aaaaa

    Informations forums :
    Inscription : Novembre 2006
    Messages : 178
    Points : 70
    Points
    70
    Par défaut Equivalent de l'accent circonflexe pour les chaines ?
    Bonsoir,

    Mon problème me semble simple, mais pas moyen de le résoudre !

    J'ai un code HTML de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <ul>
    <li><span><em>truc</em></span><acronym>machin</acronym></li>
    <li></li>
    <li><span><em>truc</em></span><acronym>machin</acronym> et aussi ça : 123456</li>
    <li>et aussi ça : 3.14159</li>
    </ul>
    Je voudrais récupérer les "et aussi ça : [un chiffre]". Si jamais je ne le trouve pas (comme c'est le cas sur la 1ère et la 2ème ligne), je voudrais récupérer une chaine vide.
    Intuitivement, j'ai envie d'écrire ceci comme regex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #<li>((?:</li>)|(?:et aussi ça([^<]+)))*</li>#is
    Mais ça ne marche pas (seul le <li></li> est récupéré), car on ne peut pas utiliser l'accent circonflexe sur les chaines. Est-ce qu'il existe une méthode pour faire quelque chose de ce genre quand même ?

    Merci et bonne soirée.

  2. #2
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonsoir,

    Je vois très bien ce que tu veux dire concernant l'utilisation de l'accent circonflexe ("is not").

    Il faut utiliser le pattern suivant, comme vu dans ce post : http://www.developpez.net/forums/d28...x-sauf-chaine/
    Tout ce qui n'est pas la chaine "1.2.3.4" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #(^(?!1\.2\.3\.4\.$))#is
    Sinon as-tu testé comme ceci, plus simplement ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #et aussi ça\s?:\s?(\d)</li>#is
    voire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #et aussi ça\s?:\s?(.*?)</li>#is
    (à tester)
    la chaine "et aussi çà" suivant d'un espace ou non, puis de ":" puis d'un espace ou non puis d'un digit.

  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
    Salut,

    J'aurais fait plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    $str = "<ul>
    <li><span><em>truc</em></span><acronym>machin</acronym></li>
    <li></li>
    <li><span><em>truc</em></span><acronym>machin</acronym> et aussi ça : 123456</li>
    <li>et aussi ça : 3.14159</li>
    </ul>";
     
    $reg = '#<li>(?:(?:(?!</li>).)*)et aussi ça : (\d+)</li>#is';
     
    preg_match($reg, $str, $m);
     
    print_r($m);
    --- edit ---
    Gratté pat Thomas !

  4. #4
    Inscrit
    Profil pro
    aaaaa
    Inscrit en
    Novembre 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : aaaaa

    Informations forums :
    Inscription : Novembre 2006
    Messages : 178
    Points : 70
    Points
    70
    Par défaut
    Merci à tous les deux ! Problème résolu !

    s.n.a.f.u, tu avais presque bon, presque !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #<li>(?:(?:(?!</li>).)*)et aussi ça : ([\d\.]+)</li>#is
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #<li>(?:(?:(?!</li>).)*)et aussi ça : (\d+)</li>#is
    (Et oui, le point de 3.14159 )

  5. #5
    Inscrit
    Profil pro
    aaaaa
    Inscrit en
    Novembre 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : aaaaa

    Informations forums :
    Inscription : Novembre 2006
    Messages : 178
    Points : 70
    Points
    70
    Par défaut
    Même si c'est résolu, j'ai 2 questions qui me trottent dans la tête :
    - Est-ce que le "?!" correspond à un principe ou une technique précise ? C'est juste pour pouvoir chercher des informations dessus sur Google.
    - Comment je fais pour dire "ni la chaine </li> ni la chaine </b>" par exemple ? J'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #(?:(?:((?!</li>)|(?!</b>)).)*)(</b>|</li>)#is
    Sans succès

  6. #6
    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
    le construct (?!) est une assertion négative avant. Et encore une fois, DVP est une bible : http://g-rossolini.developpez.com/tu...=syntaxe#LII-8

    Pour éliminer aussi </b>, je tenterais un truc comme ça (sans test) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #(?:(?:(?!</li>|</b>).)*)(</b>|</li>)#is
    De mémoire, je crois que cela devrait marcher, mais seulement pour une assertion avant, les assertions arrières variables n'étant pas implémentées

  7. #7
    Inscrit
    Profil pro
    aaaaa
    Inscrit en
    Novembre 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : aaaaa

    Informations forums :
    Inscription : Novembre 2006
    Messages : 178
    Points : 70
    Points
    70
    Par défaut
    Merci ! Maintenant c'est vraiment résolu !

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

Discussions similaires

  1. [XSD] Equivalent du <choice> pour les attribut
    Par BigOne55 dans le forum Valider
    Réponses: 6
    Dernier message: 14/03/2014, 19h24
  2. Equivalent de "onunload" mais que pour les postbacks ?
    Par Invité dans le forum ASP.NET
    Réponses: 3
    Dernier message: 31/01/2012, 15h12
  3. Caractère spéciaux pour les chaines
    Par bubulemaster dans le forum Débuter
    Réponses: 3
    Dernier message: 01/07/2009, 16h04
  4. Equivalent du L en C pour les valeurs hexa
    Par Rustine dans le forum Delphi
    Réponses: 2
    Dernier message: 11/03/2007, 13h05
  5. [débutant] equivalent à sprintf pour les std::string
    Par Biosox dans le forum SL & STL
    Réponses: 22
    Dernier message: 26/08/2005, 12h46

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