JeuWeb - Crée ton jeu par navigateur
Une regex pas simple... - 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 : Une regex pas simple... (/showthread.php?tid=2518)

Pages : 1 2 3


Une regex pas simple... - srm - 17-09-2010

J'ai mis PHP car il faut bien mettre quelque chose mais bon, le mieux c'est de tester la regex sur : http://gskinner.com/RegExr/

L'idée c'est de pouvoir avec une regex parser un texte de ce genre :
Code :
## bout5 [html]
Bouh 5
## bout6
Bouh 6
Bouh 6 ## bis

Bouh 6
##
Bouh 7
Bouh 7 bis

Qui doit donc retourner :
Nom : bout5
Syntaxe : html
Contenu : Bouh 5

Nom : bout6
Syntaxe :
Contenu : Bouh 6
Bouh 6 ## bis

Bouh 6

etc ....

J'ai bien trouvé une regex qui fait ça, mais elle est relativement compliquée, donc je viens vous demander vos solutions pour voir si vous en trouvez une plus simple.


RE: Une regex pas simple... - niahoo - 17-09-2010

Ben fais voir ta regex pour dégrossir déjà ;p


RE: Une regex pas simple... - srm - 17-09-2010

Wala : (?ms)^## ?([^\[\r\n]+)? ?(?:\[(\w+)\])?((?Sad?!^##).)+)


RE: Une regex pas simple... - niahoo - 17-09-2010

avec quoi tu l'utilises, je ne reconnais pas la forme. scala ?


RE: Une regex pas simple... - srm - 17-09-2010

Là oui Scala, mais c'est standard, ça marche sur tous les langages qui gèrent correctement les Regex Smile
Tout au plus il y a (?ms) qui peut te déranger, dans certains langages c'est /regex/ms c'est tout Smile


RE: Une regex pas simple... - niahoo - 17-09-2010

hmmm et ben c'est tendu ..

y a le "## bis" qui est chiant quoi.

<?php

$t =
'## bout5 [html]
Bouh 5
## bout6
Bouh 6
Bouh 6 ## bis

Bouh 6
##
Bouh 7
Bouh 7 bis';

echo "Texte à parser:\n", "$t\n\nRésultat:\n\n";

$ar = array();

$ex = "/^## ?(\w)?(?: \[(\w+)\])?(((?!^##).)+)/ms";
/*
j'ai fait un peu au pif car je ne connais pas la syntaxe '(?'.
J'en ai déduit que ça voulait dire "ne pas capturer cette parenthèse"
et "(?:" pour "osef du texte suivant"
*/
preg_match_all($ex, $t, $ar, PREG_SET_ORDER);

print_r($ar);

Mais bon c'est chaud de simplifier d'avantage. Je serais toi, je réserverais les '##' pour la déclaration d'un item, donc interdiction d'en mettre dans le contenu.


RE: Une regex pas simple... - srm - 17-09-2010

Oui sauf que je ne peux pas imposer à l'utilisateur de ne pas mettre ## Big Grin


RE: Une regex pas simple... - niahoo - 18-09-2010

tu comptes faire quoi en fait ?

tu peux lui renvoyer un "désolé mec, mais ton code est invalide" non ?


RE: Une regex pas simple... - atra27 - 18-09-2010

Si ya pas de structure a ta regex sa va etre tendu non?

a la limite on peut forcer les ## en début de ligne a étre des déclarations. Maintenant tu veux parser un code sans qu'il n'y ai de syntaxe précise dans ton code.

Pourquoi tu fait pas le classique item{def}

Enfin je sais pas mais je comprend déjà pas la logique dans le code que tu veut parser...


RE: Une regex pas simple... - srm - 18-09-2010

C'est la même que dans pastie.org pour les sections Wink