Regex casse-tête

Résolu/Fermé
snipchain Messages postés 6 Date d'inscription samedi 6 juillet 2013 Statut Membre Dernière intervention 18 août 2013 - 6 juil. 2013 à 20:46
 snipchain - 9 juil. 2013 à 14:04
Bonjour à tous :)

je cherche à spliter une longue chaine en plusieurs petites suivant certaines variables + et - optionnels et en fonction des " pour les expressions...
pour être plus clair, j'aimerai que la chaine

$chaine = 'mot0 mot1 +mot2 -mot3 "expression a" +"expression b" -"expression c"';

soit splité en

mot0
mot1
+mot2
-mot3
"expression a"
+"expression b"
-"expression c"

j'ai pensé faire
preg_split('#[\+-]?(")?(.+)(")?#i', $chaine);
(" à la place des " car j ai déjà passé la variable dans htmlspecialchars) mais ca ne marche pas et je ne vois pas où ca cloche... :s n étant pas expert en regex, je me demandais si quelqu'un pouvait m'aider? :p :)

Merci beaucoup d'avance pour votre aide car j ai déjà le cerveau qui fume!

1 réponse

JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 8/07/2013 à 00:40
Salut,

Je ne suis pas très fan des expressions régulières, mais j'ai pu faire ça avec preg_match_all !

preg_match_all('#([-|+]*)([a-zA-Z0-9]+|("[a-zA-Z0-9 ]+"))#', $chaine, $result);
var_dump($result[0]);


Mettez en résolu quand c'est résolu -.- ...
1
Merci beaucoup Joos! j'ai juste dû modifier un peu pour que ca puisse prendre en compte certaine exception et c'est tout! je ne pense jamais à utiliser preg_match_all, je devrai y penser un peu plus souvent...
encore merci en tous cas! :)
0