Expressions régulières et récursivité - PHP - Programmation
Marsh Posté le 28-07-2004 à 16:44:58
A priori une grammaire est plus adaptée pour résoudre ton problème. Je crois pas qu'il y en ait de dispo en php, donc va falloir que tu te fasses ton parser.
//
hack rapide - tu peux transformer ton {un{deux{... en <tag>un<tag>deux</tag> etc avec un simple parsing de la chaîne - suffit de compter le nombre de { pour savoir quand ouvrir et fermer un tag. Ensuite, tu utilises domxml pour avoir ton arbre, faire tes modifs, puis le retransformer en chaîne. Tu utilises la manip inverse de parsing pour retransformer en les <tag> en ].
youdontcare | Je dis des conneries, y'a même pas besoin de parser - deux str_replace suffiront. |
kalex | Ok, c'est ce que je me disais... |
kalex | J'ai bien compris l'astuce avec XML, mais comme j'aime bien faire les choses moi même (et me compliquer la vie ), j'ai fait ce truc :
Grave défaut. Le bon programmeur est flemmard et utilise l'existant plutôt que réinventer la roue. Ici tu as ton propre format & ton propre parser - tu aurais utilisé du xml, tu n'aurais pas à te poser ce genre de questions (format, robustesse & co). Marsh Posté le 29-07-2004 à 03:50:43 Je ne suis pas programmeur, mais je m'y connais assez pour savoir que c'est aussi une question de point de vue. Je suis d'accord avec toi, pour ce simple exemple, XML serait très pratique. Marsh Posté le 29-07-2004 à 05:44:00
Si tu passes du temps à réinventer la roue et à la debugger, ce temps ne sera pas consacré à ton projet. Si tu considères perdre du temps comme un point de vue, tu devrais le revoir.
Tu peux remonter encore plus loin. Si tu as envie de tout maitriser, pourquoi ne créé-tu pas ton langage ? Ton serveur web ? Ton processeur ? Les libs sont là pour abstraire un mécanisme connu et permettre des applications nouvelles. Mieux vaut apprendre à les utiliser correctement plutôt que de faire sa tambouille qui sera forcément moins efficace et plus buggée.
Le temps que tu passeras à apprendre un standard te permettra d'utiliser ce standard partout, autant dans la relecture de ton code que celui des autres. Reviens dans 6 mois debugger ta méthode custom, tu auras bien du mal. Marsh Posté le 29-07-2004 à 15:29:02 Attends... jai jamais dis qu'il ne fallait pas réutiliser de code. Message édité par kalex le 30-07-2004 à 03:19:47 Marsh Posté le 29-07-2004 à 15:35:38 Tiens, récemment j'ai vu que JF Maquiné d'onversity a trouvé une méthode d'optimisation des boucles pour des fonctions de bases. Lorsqu'il a commencé à travailler là dessus, lui aurais-tu dit qu'il réinventait la roue ? Marsh Posté le 29-07-2004 à 20:19:01 Si tu utilises des mécanismes standard, c'est autant de temps gagné à ne pas définir de formats, écrire de parser, etc. Tu dis que tu n'es pas programmeur, tu pourrais utiliser ces mécanismes pour gagner du temps et innover une application dans ton domaine d'expertise. Au lieu de ça, tu réinventes très mal la hiérarchie - tu as ton format, ta méthode de parsing, et tes bugs. Marsh Posté le 30-07-2004 à 03:18:43 Souvent tu n'as pas de prise sur le format à traiter... Sinon tu penses bien que j'utiliserais directo XML. Marsh Posté le 30-07-2004 à 04:14:20 $phrase = "{ comme {on { dit { chez nous}}ben}ca le fait}"; --------------- !jb! Marsh Posté le 30-07-2004 à 04:14:50 je reve pas, c beaucoup plus simple??? --------------- !jb! Marsh Posté le 30-07-2004 à 13:04:39 Oui, mais j'ai dit dans le premier post qu'il fallait en fait retraiter les données entre accolades, mais que je simplifiais volontairement. Merci quand même ! Marsh Posté le 30-07-2004 à 13:13:30 Est ce que ce cas est possible ? Sujets relatifs:
Leave a ReplayMake sure you enter the(*)required information where indicate.HTML code is not allowed |
Marsh Posté le 28-07-2004 à 16:25:48
Salut tout le monde,
J'ai un problème sur lequel je bute depuis quelque temps, et personne ne semble savoir comment le résoudre. C'est du code PHP, mais ça vaut aussi pour Perl.
Je vais essayer de simplifier un max.
Au départ j'ai un texte :
Je veux le transformer pour qu'il devienne :
Vous vous doutez bien que dans le cas concret un simple str_replace ne suffit pas (en fait, il faut retraiter les données entre accolades, mais je simplifie ).
Je croyais avoir trouvé la solution avec la récursivité :
Mais ça affiche :
Tout va bien pour le premier niveau d'empilement. Mais comment faire pour que les accolades à l'intérieur d'autres accolades soient transformées aussi ?
Merci !