|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : février 2006 Messages : 4 ![]() |
Bonjour à tous,
PHP5, expressions régulières compatibles perl. Je cherche à extraire d'une chaine une suite de caractère ne contenant pas le signe ' s'il n'est pas précédé d'un backslash autrement dit : Code :
L'idée est de commencer le pattern par un simple quote, puis d'accepter un nombre quelconque de caractères n'étant pas un simple quote non précédé (vous suivez ?) par un backslash, puis je clos le pattern par un simple quote. Mais l'idée ne marchant pas, je voulais savoir si quelqu'un à déjà fait ce genre de manip Merci d'avance, youx |
||
|
|
00
|
|
|
#2 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Salut
J'aurais utilisé une autre approche : addslashes(stripslashes($string))...
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : février 2006 Messages : 4 ![]() |
Désolé, mais cela n'a rien à voir avec ma question : mon but est de pouvoir extraire les données comprises entre les simple quote quel que soit son contenu à partir du moment où il respecte une syntaxe juste pour un paramètre :
param1, param2, param3 ... avec param2 = 'contenu \' correct' qui va être matché et param3 = 'contenu ' incorrect' qui ne sera pas matché en intégralité. Des idées ? |
|
|
00
|
|
|
#4 |
|
Membre chevronné
![]() |
Hello,
j'ai déjà fait ce genre de parseur, mais sans les expressions régulières... D'ailleurs si ton apostrophe est précédé d'un nombre pair de backslashs, il n'est pas échappé... et ça devient beaucoup trop complexe pour être gérable via les expressions régulières non ? |
|
|
00
|
|
|
#5 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Ouarf, ok, désolé pour le HS.
Avec une regexp, je ne sais pas le faire. J'ai une autre méthode à te proposer : remplace les \' par un caractère (ou par une chaîne) qui n'existe pas dans ta chaîne source, parse-la, puis replace tes guillemets.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#6 |
|
Membre chevronné
![]() |
Nawak...
|
|
|
00
|
|
|
#7 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Ouais, nawak, mais le problème me semble tordu à la base... C'est refaire le parseur de chaîne de PHP et je n'en vois pas trop l'intérêt : si c'est pour vérifier qu'un fichier texte contient des chaînes correctes, il y a sûrement moyen d'y arriver avec eval().
J'essaie de proposer des solutions, quoi... Tiens, une autre : le problème des regexp (en relation avec le problème actuel) est qu'elles ne peuvent pas vérifier ce qu'il y a avant le caractère dont nous nous occupons. Une technique consisterait à inverser le texte et à le parser.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#8 |
|
Membre chevronné
![]() |
Le problème n'est pas tordu du tout, il s'agit d'un simple parseur... et il ne s'agit pas forcément d'un parseur PHP. Coté utilisation courrante, il y a par exemple les moteurs de templates, les "colorisateurs" de code, les parseurs Wiki, BB, etc. Et ce n'est certainement pas eval() qui remplira ce role.
Quant au "problème" des regexp, bah si justement elles font ça très bien. Comme l'a dit xuoy, les assertions négatives servent justement à ça. Il se trouve juste que dans son cas cela ne me semble pas adapté. |
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Inscription : février 2006 Messages : 4 ![]() |
Merci pour vos réponses,
j'ai trouvé ça qui répond à mes attentes pour le moment : Visiblement, le nombre de backslash ne pose pas problème et vu que mon parser teste la longueur des elements matchés pour voir si la phrase donnée en paramètre est bien formée, ça roule en l'état. Pour répondre à kirkis, la solution du caractère à remplacer est pratique, facile à mettre en place, et c'est un hack que je cherche à éviter (au stade où en est mon dev, si je commence comme ça, ça risque d'être le foutoir en phase finale Je ne me suis pas vraiment penché sur la question, mais quelqu'un connait-il un vrai parser en php qui me permette de définir mon langage puis de l'utiliser ensuite ? xoyu |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com