Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/06/2006, 10h41   #1
Membre régulier
 
Inscription : décembre 2005
Messages : 225
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 225
Points : 76
Points : 76
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+ .
bouazza92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2006, 10h52   #2
Membre régulier
 
Inscription : décembre 2005
Messages : 225
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 225
Points : 76
Points : 76
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+ .
bouazza92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2006, 11h06   #3
Membre Expert
 
Avatar de Anduriel
 
Homme
Étudiant
Inscription : février 2004
Messages : 2 168
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2004
Messages : 2 168
Points : 1 277
Points : 1 277
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 :
ereg("\[(.+)\]", $chaine);
Anduriel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2006, 11h34   #4
Membre régulier
 
Inscription : décembre 2005
Messages : 225
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 225
Points : 76
Points : 76
Ah j'ai trouvé la raison !!!
en effet , c'est moi qui est stupide , je devais mettre (.*) au lieu de [(*.)]
bouazza92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2006, 11h39   #5
Membre régulier
 
Inscription : décembre 2005
Messages : 225
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 225
Points : 76
Points : 76
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 []] .
bouazza92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2006, 16h06   #6
Membre émérite
 
Inscription : mai 2004
Messages : 708
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 708
Points : 853
Points : 853
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
ripat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2006, 16h50   #7
Membre Expert
 
Avatar de Lorenzo77
 
Inscription : mai 2006
Messages : 1 294
Détails du profil
Informations personnelles :
Âge : 40
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2006
Messages : 1 294
Points : 1 220
Points : 1 220
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
Lorenzo77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2006, 18h58   #8
Futur Membre du Club
 
Inscription : avril 2006
Messages : 38
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 38
Points : 18
Points : 18
Regex optimisée :

Code :
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.
Jukien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2006, 22h52   #9
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
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 126
Points : 2 602
Points : 2 602
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.
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2006, 12h59   #10
Membre régulier
 
Inscription : décembre 2005
Messages : 225
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 225
Points : 76
Points : 76
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 .
bouazza92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2006, 13h02   #11
Membre chevronné
 
Avatar de stunti
 
Inscription : mai 2006
Messages : 521
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : mai 2006
Messages : 521
Points : 602
Points : 602
Code :
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
stunti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2006, 13h38   #12
Membre régulier
 
Inscription : décembre 2005
Messages : 225
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 225
Points : 76
Points : 76
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 .
bouazza92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2006, 14h40   #13
Membre chevronné
 
Avatar de stunti
 
Inscription : mai 2006
Messages : 521
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : mai 2006
Messages : 521
Points : 602
Points : 602
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
stunti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2006, 14h43   #14
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
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 126
Points : 2 602
Points : 2 602
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/
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2006, 11h47   #15
Membre régulier
 
Inscription : décembre 2005
Messages : 225
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 225
Points : 76
Points : 76
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
bouazza92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h21.


 
 
 
 
Partenaires

Hébergement Web