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 :

erreur REG_BADRPT avec ereg [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 225
    Points : 113
    Points
    113
    Par défaut erreur REG_BADRPT avec ereg
    Salut tous ,

    bon voilà mon probléme , j'éssaie avec une expression réguliére de trouver ce qui est entre les crochets [ et ] , et j'utilise cette regex avec ereg \[[(*.)]]\] mais ça ne marche absolument pas , et ça me retourne l'érreur REG_BADRPT , certains qui commenent dans la documentation de PHP disent qu'il faut préceder des caractéres spéciaux avec un anti-slash \ , mais je pense quand même que j'ai précédé le premier et le dernier crochet par un anti-slash :S

    Peut quelqu'un m'aider ?

    Merci d'avance , a+ .
    Forum Programmation d'OS - Tutoriel pour créer un petit noyau 32 bits .

    ( le développement de littlefoot86 est abandonné ... )

  2. #2
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 225
    Points : 113
    Points
    113
    Par défaut
    Salut ,

    bon j'ai réussi à résoudre l'érreur avec cette expression [[][(*.)][]]
    mais peut quelqu'un m'expliquer pourquoi ma premiére regex ne marche pas ?

    A+ .
    Forum Programmation d'OS - Tutoriel pour créer un petit noyau 32 bits .

    ( le développement de littlefoot86 est abandonné ... )

  3. #3
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Il y a un problème avec les crochets que tu mets en trop, il doit considérer ça pour une classe...
    Sinon moi je ferai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ereg("\[(.+)\]", $chaine);

  4. #4
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 225
    Points : 113
    Points
    113
    Par défaut
    Ah j'ai trouvé la raison !!!
    en effet , c'est moi qui est stupide , je devais mettre (.*) au lieu de [(*.)]
    Forum Programmation d'OS - Tutoriel pour créer un petit noyau 32 bits .

    ( le développement de littlefoot86 est abandonné ... )

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 225
    Points : 113
    Points
    113
    Par défaut
    Merci pour ta réponse , j'ai pris cette regex : [[](.*)[]]
    le premier crochet est considéré comme une ouverture de la classe .
    le deuxiéme est considéré comme un caractére normal , car il est impossible de le considerer comme ouverture de classe à l'intérieur d'une classe !
    le troisiéme est reconnu comme la fermeture de la premiére classe , et c'est la même chose pour la dérniére classe []] .
    Forum Programmation d'OS - Tutoriel pour créer un petit noyau 32 bits .

    ( le développement de littlefoot86 est abandonné ... )

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Et, tant que tu y es, utilises preg et sa famille.

    Les fonctions PCRE sont tellement plus riches et rapides...
    :q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
    :quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
    Jabber: ripat at im.apinc.org

  7. #7
    Membre expérimenté Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Points : 1 537
    Points
    1 537
    Par défaut
    REG_BADRPT veut dire :
    REGex BAD RePeTition --> tu au une erreur au niveau du caractere que tu essaye de repeter et dans ton cas tu essayes de repeter celui la : "(" ce qui provoque une erreur logique.

    et oui, les REGEX PERL (PCRE en PHP) sont 1000 fois mieux que les posix ou autre
    Le plus grand arbre est né d'une graine menue, une tour de neuf étages est partie d'une poignée de terre.
    Mon blog : http://web.codeur.free.fr

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 38
    Points : 28
    Points
    28
    Par défaut
    Regex optimisée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match('`\[([^]]+)]`', $chaine, $match);
    (ou preg_match_all(), s'il y a plusieurs éléments à capturer)

    Note : il faut échapper les crochets ouvrant pour les utiliser en tant que "caractère". Par contre, inutile de fermer les fermants.

  9. #9
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    Citation Envoyé par Jukien
    Par contre, inutile de fermer les fermants.
    si les fermants doivent etre fermé

    bien sur Jukien voulait dire pas besoin d'échapper les crochets fermants.

  10. #10
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 225
    Points : 113
    Points
    113
    Par défaut
    Merci beaucoup pour vos réponses , j'ai commencé maintenant à utiliser les PCRE , ils sont plus rapides ( j'ai fait le test avec microtime ) et donnent une description compréhensible de l'erreur .
    Mais j'ai encore un probléme avec une autre regex ( au lieu de faire un nouveau sujet , je poste ici ) , j'essaie de capturer ce qui est entre les balises <b> et </b> et pour celà j'utilise cette regex : `<b>(.*)</b>` mais ça ne marche pas comme prévu sur des pages HTML avec de nombreuses balises <b> , ça capture donc ce qui est entre le premier <b> et le dernier </b> .
    Peut quelqu'un m'aider ?

    Merci d'avance , et merci encore pour votre aide .

    A+ , Bouazza .
    Forum Programmation d'OS - Tutoriel pour créer un petit noyau 32 bits .

    ( le développement de littlefoot86 est abandonné ... )

  11. #11
    Membre confirmé Avatar de stunti
    Inscrit en
    Mai 2006
    Messages
    520
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mai 2006
    Messages : 520
    Points : 594
    Points
    594
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match_all('#<b>(.*?)</b>#mi',$texte, $match);
    Ca devrait etre bon.
    If it's not broken, don't fix it.
    BiliBa Built on top of Zend Framework

  12. #12
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 225
    Points : 113
    Points
    113
    Par défaut
    Salut ,

    merci stunti pour ta réponse , ça marche parfaitement , mais pourriais tu m'expliquer comment ça marche ? et plus précisémment les signes # et #mi ?

    Merci d'avance .
    Forum Programmation d'OS - Tutoriel pour créer un petit noyau 32 bits .

    ( le développement de littlefoot86 est abandonné ... )

  13. #13
    Membre confirmé Avatar de stunti
    Inscrit en
    Mai 2006
    Messages
    520
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mai 2006
    Messages : 520
    Points : 594
    Points
    594
    Par défaut
    les # sont des delimiteurs. Tu aurais aussi pu mettre des /

    m permet de ne pas s'occuper des ligne multiple (tu le vois comme une seule ligne)
    i : non sensible a la casse.

    tu trouveras ton bohneur : http://www.lumadis.be/regex/tuto_pcre.php
    If it's not broken, don't fix it.
    BiliBa Built on top of Zend Framework

  14. #14
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    C'est disons pas simple a expliquer, c'est pourquoi je te propose cela :
    http://expreg.com/ site super !!
    http://www.lumadis.be/regex site bien !!
    http://fr2.php.net/manual/fr/referen....modifiers.php php.net pour la documentation officielle des pattern

    j'ai trouvé ca sur developpez, mais j'ai jamais regardé : http://cyberzoide.developpez.com/php4/regex/

  15. #15
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 225
    Points : 113
    Points
    113
    Par défaut
    Salut ,

    merci pour ces tutoriels , mais il vaut mieux utiliser le paramétre U au lieu d'utiliser ? aprés chaque * !
    Donc ça sera quelque chose comme ça : `<b>(.*)</b>`miU
    Merci beaucoup pour vos réponses
    Forum Programmation d'OS - Tutoriel pour créer un petit noyau 32 bits .

    ( le développement de littlefoot86 est abandonné ... )

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

Discussions similaires

  1. debutant: erreur LNK2001 avec la librairie GSL
    Par drill3 dans le forum MFC
    Réponses: 6
    Dernier message: 25/04/2005, 13h58
  2. erreurs opengl avec devcpp
    Par Vermin dans le forum OpenGL
    Réponses: 2
    Dernier message: 13/04/2004, 14h50
  3. Erreur EACCESSVIOLATION avec des compsts créés dynamiquement
    Par tsikpemoise dans le forum Bases de données
    Réponses: 4
    Dernier message: 28/02/2004, 19h05
  4. Erreur fréquente avec ASP et IIS
    Par Community Management dans le forum ASP
    Réponses: 2
    Dernier message: 11/02/2004, 22h20
  5. Erreurs IIS avec Multiples Frames avec xmlrad
    Par powerlog dans le forum XMLRAD
    Réponses: 4
    Dernier message: 01/07/2003, 13h15

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