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][preg_match_all]ma regex marche pas [Fait]


Sujet :

Langage PHP

  1. #1
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 949
    Points : 730
    Points
    730
    Par défaut [regex][preg_match_all]ma regex marche pas
    bonjours, je vous montre le string a chercher a l'aide d'une regex :

    <a href="http://blalba.com/repertoire/toto-est-bete.php5" mce_href="repertoire/toto-est-bete.php5">Booking at your tata<br></a>
    le regex que j'ai ecrit au debut etait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $pattern2 = '<a *href="(.*) *mce_href="(.*) *">.*<\/a>';
    if (preg_match_all($pattern2, $match, $tabLiens) ) {
    ...
    }
    seulement, ca me note une erreure :
    Warning: preg_match_all() [function.preg-match-all]: Unknown modifier '.' in /www/skiset/www/backOffice/traduction/pagesstatiques.php5 on line 159
    j'ai donc essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern2 = '/<a *href="(.*) *mce_href="(.*) *">.*<\/a>/s';
    j'ai plus l'erreure mais, ce ne em trouve pas le string,
    cette solution ne marche pas non plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern2 = '/<a *mce_href="([[:alnum:][:punct:][:graph:]]*)" *href="([[:alnum:][:punct:][:graph:]]*)" *>[[:alnum:]<>,:;]*<\/a>/s';
    ca ne marche pas non plus...

  2. #2
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Points : 1 071
    Points
    1 071
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    $tab = array();
    preg_match_all( 
        '/<a\s+href="(.*)"\s+mce_href="(.*)"\s*>.*<\/a>/', 
        '<a href="http://blalba.com/repertoire/toto-est-bete.php5" mce_href="repertoire/toto-est-bete.php5">Booking at your tata<br></a>', 
        $tab);
    print_r($tab);
    ?>
    me donne

    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
    Array
    (
        [0] => Array
            (
                [0] => <a href="http://blalba.com/repertoire/toto-est-bete.php5" mce_href="repertoire/toto-est-bete.php5">Booking at your tata<br></a>
            )
     
        [1] => Array
            (
                [0] => http://blalba.com/repertoire/toto-est-bete.php5
            )
     
        [2] => Array
            (
                [0] => repertoire/toto-est-bete.php5
            )
     
    )

  3. #3
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 949
    Points : 730
    Points
    730
    Par défaut
    merci

  4. #4
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 949
    Points : 730
    Points
    730
    Par défaut
    la regex fonctionne... sauf en cas de non retours a la ligne il faudrait la rendre non gourmande, mais, je ne connait pas bien la syntaxe que tu as proposé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '/<a\s+href="(.*)"\s+mce_href="(.*)"\s*>.*<\/a>/';
    je suis en train d'eesayer differentes syntaxes,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '/<a\s+href="(.*)"\s+mce_href="(.*)"\s*>.*<\/a>/U';
    a l'ai de bien fonctionner, je poste juste pour etre sur de ne pas me fourvoyer dnas ma solution

  5. #5
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Points : 1 071
    Points
    1 071
    Par défaut
    sauf en cas de non retours a la ligne
    Je peux avoir un exemple stp?

  6. #6
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 949
    Points : 730
    Points
    730
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <li><a href="http:///paiement.html" mce_href="paiement.html">Modes de paiement</a></li>
    <li><a href="http:///engagement.html" mce_href="engagement.html">L'engagement XXX</a></li> <li class="actif"><a href="http:///remises-tarifaires.html" mce_href="remises-tarifaires.html">Descriptif des remises</a></li>
    <li><a href="http:///cgv.html" mce_href="cgv.html">Les conditions générales de ventes</a> </li>
    la partie en rouge etait prise avec son predesceseur en vert.

    en gros, pour la premiere parenthese, le contenu capturé etait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http:///engagement.html" mce_href="engagement.html">L'engagement XXX</a></li> <li class="actif"><a href="http:///remises-tarifaires.html
    et pour la seconde :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    remises-tarifaires.html
    l'expression reguliere etait donc gourmande, avec comme limite, le retours a la ligne

  7. #7
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Points : 1 071
    Points
    1 071
    Par défaut
    le U que tu as mis en correct, sinon, tu peux ajouter des ?

    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '/<a\s+href="(.*?)"\s+mce_href="(.*?)"\s*>.*<\/a>/'
    devrait fonctionner (pas tester)
    Sinon, ta solution est bonne aussi.

  8. #8
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Points : 1 071
    Points
    1 071
    Par défaut
    Un petit lien pour appronfir les regexp pcre
    http://g-rossolini.developpez.com/tu...?page=sommaire

  9. #9
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 949
    Points : 730
    Points
    730
    Par défaut
    merci de ta reponse

    le ? est pour specifier un ungready ponctuel?

  10. #10
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Points : 1 071
    Points
    1 071
    Par défaut
    oui
    (mais ça s'écrit ungreedy, je crois)

  11. #11
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 949
    Points : 730
    Points
    730
    Par défaut
    arf :'(

    j'ai encore un pb, j'ai la chaine suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href=\"http://XXX.dev.YYY.com/contact/sc-contact.php5\" mce_href=\"contact/sc-contact.php5\">Service client </a>
    pour la "retrouver j'utilise le pattern suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '/<a\s+href=\\"(.*)\\"\s+mce_href=\\"(.*)\\"\s*>.*<\/a>/U';
    j'echappe les antislash, mais, je ne retrouve aucune occurence...

    la seule difference par rapport au pb precendent est constitué par ces maudits antislashs!

  12. #12
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 949
    Points : 730
    Points
    730
    Par défaut
    je pourrait bien faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '/<a\s+href=(.*)\s+mce_href=(.*)\s*>.*<\/a>/U';
    mais j'ai besoin de travailler sur l'url, de faire des str_replace...
    et, suivant certains parametre, mon str replace peut etre tres different, je prefere donc travailler sans les guillement echappés afin de ne pas faire de betise...

  13. #13
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 949
    Points : 730
    Points
    730
    Par défaut
    quant a :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '/<a\s+href=[\]"(.*)[\]"\s+mce_href=[\]"(.*)[\]"\s*>.*<\/a>/U'
    il me retourne l'erreure suivante :
    Warning: preg_match_all() [function.preg-match-all]: Compilation failed: missing terminating ] for character class at offset 57 in /www/skiset/www/backOffice/traduction/pagesstatiques.php5 on line 196

  14. #14
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 949
    Points : 730
    Points
    730
    Par défaut
    pb resolut en faisant maintes str_replace et trim... puis en remettant mes
    \"

  15. #15
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 949
    Points : 730
    Points
    730
    Par défaut
    je me retrouve avec de nouveaux pbs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <a mce_href="\"comment-louer/louer-online.php5\"" href="\"http://XXX.dev.YYY.com/comment-louer/louer-online.php5\""> En ligne </a>
    <ul>
    <li>
    <a mce_href="\"paiement.html\"" href="\"http://XXX.dev.YYY.com/paiement.html\"">Modes de paiement</a>
    </li>
    <li>
    <a mce_href="\"comment-louer/engagement-skiset.php5\"" href="\"http://XXX.dev.YYY.com/comment-louer/engagement-XXX.php5\"">L\'engagement Skiset</a>
    </li>
    le texte en rouge n'est pas pris par le pattern :'(

    il est dans cette structure HTML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <ul id="\"ss-nav\"">
    <li>
    <a mce_href="\"comment-louer/louer-online.php5\"" href="\"http://XXX.dev.YYY.com/comment-louer/louer-online.php5\""> En ligne </a>
    <ul>
    <li>
    </li>
    ...
    </ul>
    </li>
    ...
    </ul>
    j'arrive pas a comrpendre pourquoi il n'est pas capturé... :'(

    je suis desolé d'etre aussi chiant, mais, j'y arrive vraiement pas...

  16. #16
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 949
    Points : 730
    Points
    730
    Par défaut
    apparement, le "." du motif ne fonctionne pas totalement
    =>il a l'air de ne pas capturer les "-"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '/<a\s+href=(.*)\s+mce_href=(.*)\s*>.*<\/a>/U';
    j'ai essayé avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '/<a\s+href=([.-]*)\s+mce_href=([-.]*)\s*>.*<\/a>/U';
    mais la syntaxe n'est pas correcte...

    j'ai aussi essayé avec des laternatives :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '/<a\s+href=(#.|-#*)\s+mce_href=(#.|-#*)\s*>.*<\/a>/U';
    ca ne fonctionne pas non plus :'(

    edit : erreure, le pb ne vient aps des "-", mais, bel et bien de portions de ma chaine qui ne sont pas capturées, alors qu'elles n'ont aucune difference avec le reste...

Discussions similaires

  1. RegEx multiline ne marche pas.
    Par eric.bryan dans le forum C#
    Réponses: 0
    Dernier message: 28/08/2013, 18h16
  2. regex : capture d'accents - \p{L} ne marche pas
    Par Phonatacid dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 23/04/2009, 10h38
  3. [RegEx] regex simple qui ne marche pas (encore)
    Par denisvignes dans le forum Langage
    Réponses: 5
    Dernier message: 19/09/2008, 15h04
  4. [RegEx] Regex preg_match_all()
    Par juninho269 dans le forum Langage
    Réponses: 5
    Dernier message: 07/06/2008, 22h17

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