|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre régulier
![]() Inscription : décembre 2005 Messages : 225 ![]() |
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+ . |
|
|
00
|
|
|
#2 |
|
Membre régulier
![]() Inscription : décembre 2005 Messages : 225 ![]() |
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+ . |
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() Étudiant Inscription : février 2004 Messages : 2 168 ![]() |
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: |
|
|
00
|
|
|
#4 |
|
Membre régulier
![]() Inscription : décembre 2005 Messages : 225 ![]() |
Ah j'ai trouvé la raison !!!
en effet , c'est moi qui est stupide , je devais mettre (.*) au lieu de [(*.)] |
|
|
00
|
|
|
#5 |
|
Membre régulier
![]() Inscription : décembre 2005 Messages : 225 ![]() |
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 []] . |
|
|
00
|
|
|
#6 |
|
Membre émérite
![]() Inscription : mai 2004 Messages : 708 ![]() |
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 |
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Inscription : mai 2006 Messages : 1 294 ![]() |
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 |
|
00
|
|
|
#8 |
|
Futur Membre du Club
![]() Inscription : avril 2006 Messages : 38 ![]() |
Regex optimisée :
Code :
preg_match('`\[([^]]+)]`', $chaine, $match); Note : il faut échapper les crochets ouvrant pour les utiliser en tant que "caractère". Par contre, inutile de fermer les fermants. |
|
|
00
|
|
|
#9 | |
|
Expert Confirmé
![]() Maxime PasquierExpert PHP Inscription : novembre 2004 Messages : 2 126 ![]() |
Citation:
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 |
|
|
|
00
|
|
|
#10 |
|
Membre régulier
![]() Inscription : décembre 2005 Messages : 225 ![]() |
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 . |
|
|
00
|
|
|
#11 |
|
Membre chevronné
![]() Inscription : mai 2006 Messages : 521 ![]() |
Code :
preg_match_all('#<b>(.*?)</b>#mi',$texte, $match); |
|
|
00
|
|
|
#12 |
|
Membre régulier
![]() Inscription : décembre 2005 Messages : 225 ![]() |
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 . |
|
|
00
|
|
|
#13 |
|
Membre chevronné
![]() Inscription : mai 2006 Messages : 521 ![]() |
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 |
|
|
00
|
|
|
#14 |
|
Expert Confirmé
![]() Maxime PasquierExpert PHP Inscription : novembre 2004 Messages : 2 126 ![]() |
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 |
|
|
00
|
|
|
#15 |
|
Membre régulier
![]() Inscription : décembre 2005 Messages : 225 ![]() |
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 |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com