- Aide : Expression Régulière [PHP] - PHP - Programmation
Marsh Posté le 03-02-2006 à 11:01:54
Les expressions régulières ça me casse le crâne, je vais pas être motivé là
Par contre, pour ton problème de $z, peut-être peux-tu :
1) ne placer que des balises ouvrantes avec tes regex.
2) les fermer dans un second temps sans utiliser de regex : si tu tombes sur une balise, tu fermes la précédente ; idem si tu tombes sur un $z. A mon avis ça peut-être fait sans regex avec des explodes bien placés, basés sur le ">" et le "<".
J'ai pas trop étudier ton problème, mais ça peut être éventuellement moins casse tête en procédant ainsi. Mais je le répète, c'est une idée comme ça, pas cogitée ^^
Marsh Posté le 03-02-2006 à 11:07:57
c'est une idée oui, mais sans regex, j'ai dejà essayé, et c'est encore pire !!!
J'ai tester caractère par caractère et à base d'explode ... c'est beaucoup moins concluant, et bcp plus complexe à ecrire meme de rien !
Pour ta solutions, c'est pas si simple que ca ! mais je vais faire quelques test ( en laissant la balise $z dans le code, et en essayant de re-travailler la chaine derière )
@+
ps: en passant, c'est juste le $z dans la gestion des chaines de couleur qui me pose problème, pour l'italique ou le wide, c'est pas compliqué !
Marsh Posté le 03-02-2006 à 11:32:42
bah un explode sur les $z, un explode sur <, un explode sur >, on choppe la dernière balise et on la ferme, je pense que ça doit être un tout petit peu moins galère ^^
Marsh Posté le 03-02-2006 à 11:35:17
je vais tester ...
@+
Marsh Posté le 03-02-2006 à 11:38:16
Salut,
juste en passant (ca ne resoud rien, mais bon...) Tu peux écrire les couleurs sur 3 caractères seulement dans les styles, ça peut peut-être simplifier ton expression.
Marsh Posté le 03-02-2006 à 12:07:22
En dehors de $z voila comment je ferais:
Code :
|
T'es obligé de faire un while car le $ d'un tag peut être pris par une 1ere pattern ( oui je suis pas clair, mais je fais de mon mieux )
Quand au $z c'est plus compliqué, je le ferais ensuite.
Tu dois compter le nombre de balises ouvertes avant celui-ci, remplacer ###(ce par quoi a été remplacé $z dans le code au dessus) par le bon nombre de balises fermantes. Puis supprimer ce nombre de balises fermantes dans le chaine qui suivait ### .... S'pas facile
edit: quand je dis "je le ferais ensuite" je veux dire: "Je ne pense pas qu'on puisse réussir à le faire en même temps..."
Marsh Posté le 03-02-2006 à 12:45:05
stf-m a écrit : Salut, |
Bonne nouvelle ! je croyais ( par erreur ) que c'etait #F80 == #F80F80 ... mais non !
Apres un cours test : http://download.moultiplayers.net/TMNss.php je m'appercois que tu as raisons ! ca vas simplifier mon bordel !
anapajari : je test ca !
@+
Marsh Posté le 03-02-2006 à 12:53:37
anapajari a écrit : En dehors de $z voila comment je ferais:
|
Bon, ca fonctionne, de la meme facon que ce que j'ai fait ^^ ( mais en carrement plus simple )
J'avais pas penser à faire une boucle ! je debutte carrement en Regex, pas en php, mais en Regex "home made"
Bon, je vais chercher à compter mes balise post ### ( pour les fermer )
@+
Marsh Posté le 03-02-2006 à 13:05:29
grrrr ... faut aussi tenir compte de celle qui sont dejà fermer !!!! Gniiii
Marsh Posté le 03-02-2006 à 13:19:59
j'ai trouvé !
enfin, je crois, à verifier !
pour compter les balises restantes à fermer ( pas de regex )
Code :
|
je vais faire des tests dans tous les sens pour verifier que tout fonctione !
@+ et encore merci !
ps code final :
Code :
|
Marsh Posté le 03-02-2006 à 13:30:26
marche po
regarde après transformation ta chaine ressemble à ça:
Code :
|
Avec ce que tu fais, tu transformes ta chaine en:
Code :
|
tu te retrouves donc avec trop de balises span fermantes.
Il faut que tu supprimes de la suite de REPLACECODELONGEXPRES autant de balises fermantes que tu en as rajoutés... Et tout se complique lorsque tu as deux REPLACECODELONGEXPRES ...
Marsh Posté le 03-02-2006 à 13:42:37
Par ailleurs je suis pas sur que ce que je t'ai donné fasse ce qu'il faut
Si tu as:
Code :
|
tu doit te retrouver avec:
Code :
|
OU
Code :
|
Si c'est la 1er solution le code que je t'ai donné marche pas ... mais il suffit de remplacer le (\$|$) par juste $ et ça devrait aller!!!
Marsh Posté le 03-02-2006 à 13:47:56
exact, je vais regarder sur different test. Il faut savoir que ce pseudo, dans TrackMania est limité en nb de carractère ! la probabilité qu'il y ai 2 $z est tres mince ( mais pas negligeable, je te l'accorde )
@+
ps: pour l'autre bug, j'avais effectivement vu ca
edit, apres test :
Code :
|
Code :
|
Code :
|
ca marche bien !
Tu matchs toute la chaine à chaque fois, mes spans sont donc avant le $z ...
Marsh Posté le 03-02-2006 à 14:06:09
par contre effectivement, ca ne marche pas avec plus d'un $z ...
Marsh Posté le 03-02-2006 à 14:35:51
bon, petite correction qui modifie correctement le code rendu ( pour un seul $z pour le moment )
Code :
|
ainsi que modifier les captures du regex :
Code :
|
ce qui donne :
Code :
|
test :
Code :
|
page ici : http://download.moultiplayers.net/TMNss.php
et la validation (x)HTML 1.0 strict : http://validator.w3.org/check?uri= [...] &verbose=1
modification : j'ai enlever autant de balise span que j'en avais ajouté
d'autres remarques ?
Merci bcp en tout ca !
Je continus de tester !
Marsh Posté le 03-02-2006 à 14:56:38
yes dans tes regex:
Code :
|
ça sert a rien d'entourner le $ final de parenthèse tu peux t'en passer. Du coup dans tes replaces les $2 ne sert plus a rien non plus.
Marsh Posté le 03-02-2006 à 15:18:23
oki, ca me feras gagner quelques micro secondes ^^
Je continus de tester !
en prod ici : http://moultiplayers.net/news.php ( en bas de page, à droite ).
@+
Marsh Posté le 03-02-2006 à 10:51:05
Bonjour tout le monde !
Voilà, j'expose mon problème actuel.
J'écrit une expression régulière qui doit formatter en (x)HTML les tags du jeu TrackMania Nation.
En effet, j'ai un serveur dédié, et je récupère en php, la liste des joueurs sur ce serveur.
Les pseudos peuvent être formatter avec des "balises" particulière pour afficher de la couleur ou faire de la mise en forme.
Je me suis donc lancé dans l'ecriture de cette Regex.
Voilà ce qu'il faut formatter :
- Couleur :
$f80[MLTI]-Blap > [MLTI]-Blap
$f0fTEST$00fTEST2 > TESTTEST2
$f80[MLTI]-Bl$zap > [MLTI]-Blap
( meme chose avec n couleur )
Explication : les couleur sont definies via un code $FFF. Il n'y a pas de balise de fermeture. La couleur reste appliqué jusqu'à ce qu'un autre la remplace ou qu'un caractère $z ( fermeture de tout les tag ) soit affiché.
- Les autres tag ( toujours sans tag de fermture, mis à part le $z valable pour tout le monde )
$i: italic
$s: shadowed <- à oublier
$w: wide spacing
$n: narrow spacing
$m: normal setting <- à oublier pour le moment
$g: default color <- à oublier pour le moment
$z: reset all
Pour ces tag là, pas de pb, c'est assez simple.
Ou j'en suis :
Je me suis attacher à utiliser preg_replace(). ( j'utilise des array() pour appliquer successivement les paterns )
Voilà donc mon code, pour l'italique par exemple :
Ce code fonctionne bien, et c'est le même pour $w et $n ( à part la mise en forme )
La où j'ai un problème c'est avec les couleurs.
En effet, le code couleur HTML et sur 6 caractères, celui du Trackmania sur 3. En doublant chacun des caractères, on obtient le bon code HTML. De plus, le $z ( annulant la mise en forme ) est assez embettant.
Ce que j'ai pour le moment qui fonctionne "presque" bien :
( ce code fonctionne pour une ou 2 couleurs, et ne tient pas compte des autres balises de mise en forme
$f80[MLTI]-Blap > [MLTI]-Blap OK
$f0fTEST$00fTEST2 > TESTTEST2 OK
$f80[MLTI]-Bl$zap > [MLTI]-Blap NO
$f0fTEST$00fTEST2$f0fTEST3 > TESTTEST2TEST3 edit: En fait, ca marche bien avec 3 couleurs ...
)
Pour mes tests, le 1er patern annule toutes les balises inutiles.
Maintenant, si j'essaye mon code avec 3 couleurs, ca ne vas pas. Je n'arrive pas à generaliser.
Deplus quand j'introduit la notion de $z dans mon code, ca devient encore plus lourd ! ( en plus de ne pas fonctionner )
Alors voilà ... si vous pouvez m'aider à ecrire cette Regex !
Je suis dispo pour toutes questions !
Merci de m'avoir lu jusqu'ici !
@+
edit: mes tests sont accessible sur cette page ( affiche la source, les <span> empechant de comprendre correctement )
Message édité par bl@p_psx le 03-02-2006 à 11:00:43
---------------
:Moultiplayers:.:Quatuor Chevalier:.:Admin G15-france.com:.:Wiki -G15-france:.:-Papa-:.