![]() |
[Resolu] [PHP] Problème sur une RegExp - Version imprimable +- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org) +-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38) +--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51) +--- Sujet : [Resolu] [PHP] Problème sur une RegExp (/showthread.php?tid=6722) |
[Resolu] [PHP] Problème sur une RegExp - Myrina - 20-03-2013 Bonjour, j'ai une regexp qui me sert à isoler les valeurs d'une énumération MySQL. Je pensais que ceci fonctionnait bien mais j'ai découvert un cas ou ça ne passe pas:
En initialisant $type avec enum('String','Integer','Boolean','Formule'), je récupère dans $values: Citation :enum('String','Integer','Boolean','Formule') J'ai la valeur Boolean qui a mystérieusement disparue. NB: une autre énumération ( enum('none','in','out') ) passée par le même traitement comporte bien les valeurs attendues en retour RE: [PHP]Problème sur une RegExp - Maks - 20-03-2013 Elle est bizarre ta regex, quand tu en passes 4 ou plus ça marche pas, quand t'en passe 3 c'est bon. Pourquoi elle si compliquée aussi ? http://rubular.com/r/Piy7W7jMiD ne suffit pas où j'ai mal suivi ? RE: [PHP]Problème sur une RegExp - Xenos - 20-03-2013 J'en profite pour demander: Citation :?:Ca représente quoi? Réponse: Cela rend la paire de parenthèses non capturantes. Et pour répondre à ton problème: les regexp n'ont pas de mémoire. Dans "(?:,'(.*?)')*", l'intérieur, c'est à dire le groupe (.*?), ne sera remplacé que par la dernière valeur de l'occurence. C'est pour cela que le résultat est "Formule" et non pas "Boolean" puis "Formule". Et je ne pense pas que Citation :'(\w+)'Soit ce qui est recherché, car Citation :Array('Foo', 'Bar', 'Bière')Respecte aussi ce pattern mais n'est pas un enum. RE: [PHP]Problème sur une RegExp - Myrina - 20-03-2013 Merci Maks pour la solution et merci Xenos pour l'explication du dysfonctionnement. En fait, la solution sera suffisante car au moment de son utilisation, je sais déjà que j'ai à faire à une énumération donc une syntaxe figée. RE: [Resolu] [PHP]Problème sur une RegExp - Xenos - 20-03-2013 Petit point: Si la valeur d'énumération possède une apostrophe...? Code : '((?:\w|\\')+)' Test: Citation :enum('Integer','l\'idée','Boolean','Formule','foo') Resultat: Citation :Match 1 Attention aussi avec "\w" si la chaine d'énumération contient des caractères autres que lettres (accentuées) chiffres ou "_". |