JeuWeb - Crée ton jeu par navigateur
petit probleme de regex, ah là là là les regex, quelle galère... - 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 : petit probleme de regex, ah là là là les regex, quelle galère... (/showthread.php?tid=6464)

Pages : 1 2


petit probleme de regex, ah là là là les regex, quelle galère... - php_addict - 25-10-2012

Bonjour

je me retrouve avec un petit problème de regex:

je doit extraire entre autre le alt de la chaine [img alt='L'eau n'est pas sèche']4[/img]


$chaine = "[img alt='L'eau n'est pas sèche']4[/img]";

$alt = preg_replace('#\[img(.*)alt=\'(.*)\'(.*)\](.*)\[/img\]#isU', '$2', $chaine , 1 , $count);

le hic c'est que dans ma chaine il y a un apostrophe et donc mon bout de code me renvois "L" au lieu de "L'eau n'est pas sèche"

ca me rend cinglé ces regex....

pourriez-vous me donner un petit coup de pouce svp?

Bonne fin de journée !


PS:

les icônes bbcode dans la partie rédaction d'un message ne fonctionnent plus sur ce forum, cela insère dans le textarea [undefined=undefined]


RE: petit probleme de regex, ah là là là les regex, quelle galère... - Myrina - 25-10-2012

(25-10-2012, 03:52 PM)php_addict a écrit : ....je doit extraire

... preg_replace...
preg_match ne serait pas mieux?

avec '#\[img.*alt=\'(.+)\'.*\].*\[/img\]#isU', ca donne quoi?


RE: petit probleme de regex, ah là là là les regex, quelle galère... - Xenos - 25-10-2012

Les balises alt sont délimitées par des doubles-guillemets " non, et pas par une apostrophe '... Ta regex possède des \' au début et à la fin du alt=, ca serait pas plutôt \"?


RE: petit probleme de regex, ah là là là les regex, quelle galère... - Sephi-Chan - 25-10-2012

C'est du code d'apprentissage ou du vrai code ? Si c'est du vrai code, pourquoi ne pas utiliser un parseur BBCode existant ? il y en a un dans la documentation de PHP.


RE: petit probleme de regex, ah là là là les regex, quelle galère... - php_addict - 25-10-2012

@Myrina la regex ne renvoie rien
@Xenos je n'ai pas le choix il faut que j'utilise les apostrophes simples
@Sephi-Chan apprentissage, et en plus je ne suis pas très fan du parseur bbcode de php

donc mon soucis c'est que dans la chaine [img alt='L'eau n'est pas sèche']4[/img] se trouvent plusieurs guillement simple, le tout est de savoir comment les prendre en compte dans la regex


RE: petit probleme de regex, ah là là là les regex, quelle galère... - srm - 25-10-2012

La structure n'est pas bonne.
Commence par là et avoir une structure de données propre.
(Même si avec cette structure sale il existe une solution que je pourrais te donner)


RE: petit probleme de regex, ah là là là les regex, quelle galère... - php_addict - 25-10-2012

merci oxman pour ton effort pédagogique Wink j'adore ta franchise (c'est sincère)

mais je ne suis pas du tout d'accord avec toi, la structure n'est pas mauvaise la preuve car le problème reste le même avec les guillemet doubles:

Code :
[img alt="citation:"il dit que ce n est pas bien""]4[/img]

il y a bien des guillemets doubles entourées de....[roulement de tambour]...guillemets doubles, le problème reste donc entier...


RE: petit probleme de regex, ah là là là les regex, quelle galère... - Xenos - 25-10-2012

Dans ce genre de système (où un caractère délimite le début et la fin d'une chaine de donnée), il existe toujours une conversion dudit caractère quand il est dans la chaine elle-même.
Par exemple, le caractère " ou ' peut-être échappé (\' = une apostrophe dans la chaine d'origine ou \" = un guillemet dans le alt d'origine). Pour SQL (autre exemple), le caractère ' qui délimite une chaine de caractère est doublé pour signifier qu'il est dans la chaine d'origine. Ainsi, ton alt s'écrirait:
"citation:""il dit que ce n'est pas bien"""

Si tu n'utilises pas ce genre de système, tu ne pourras pas trouver de parser car il n'existera mathématiquement pas de solution. Un exemple:

[img alt="contenu"]4[/img][img alt="0"]3[/img]

Pourrait être interprété de deux façons:
--> [img alt="contenu"]4[/img] + [img alt="0"]3[/img] (donc, deux images)
--> [img alt="
contenu"]4[/img][img alt="0
"]3[/img] (donc, une seule image où le "alt" contient 'contenu"]4[/img][img alt="0')

Ton système n'est donc, par nature, pas bon.
Oxman, jaimerai bien savoir quelle regexp tu aurais utilisé, car pour moi, avec cette structure sale, il n'existe tout simplement pas de solution (car certains codes peuvent être interprétés de deux façons, comme le code précédent)


RE: petit probleme de regex, ah là là là les regex, quelle galère... - archANJS - 26-10-2012

Je rejoins les autres pour ce qui est de la nature même de ton système.

Néanmoins, je crois que la (seule?) solution à ton problème serait de prendre en compte la position de ton guillemet (simple ou double, aucune importance). Je n'écrirai pas d'expression régulière, mais en gros l'idée est que tu demandes à PHP de retrouver le contenu entre :

- le guillemet absolument précédé de alt= ;
- le guillemet absolument suivi de ] .

Donc logiquement, qu'il y ait des guillemets dans ton contenu ne changera strictement rien au résultat (hormis bien sûr si l'utilisateur utilise ces mots-clés, mais là on y peut rien, et les chances sont minces de toute manière).

Bon après, je déconseille le système pour plusieurs raisons (pour ne citer seulement son manque de flexibilité et sa mauvaise conception), mais je crois que la solution à ton problème réside là.


RE: petit probleme de regex, ah là là là les regex, quelle galère... - php_addict - 26-10-2012

Merci archANJS pour tes remarques

je suis surpris qu'il n'y ai pas de regex possible dans ce cas de figure...effectivement je vais peut être revoir ce bbcode

en gros il est impossible de faire des bbcodes de la forme [bbcode param='111' width='222' height='333'] ???

y a t il une solution pour passer plusieurs paramètres dans un bbcode à l'intérieur du premier crochet [ ?