Regex séparateur []et espace [Résolu]

Signaler
Messages postés
70
Date d'inscription
lundi 3 août 2009
Statut
Membre
Dernière intervention
9 juillet 2011
-
cs_moumouf
Messages postés
70
Date d'inscription
lundi 3 août 2009
Statut
Membre
Dernière intervention
9 juillet 2011
-
Bonjour,

Un petit exemple clair :

$search = 'toto est [un idiot]';

Je souhaiterai avoir comme retour (avec preg_match_all)
array(0 => 'toto', 1 => 'est', 2 => [un idiot]);


Voici ma regex actuelle, qui ne me récupere que [un idiot] preg_match_all('#\[.*\]|(\s+(\w+)\s$)#', $search, $occ)

Pas moyen de recuperer les mots entre espaces...

Merci d'avance à l'âme charitable qui m'aidera ;)

3 réponses

Messages postés
70
Date d'inscription
lundi 3 août 2009
Statut
Membre
Dernière intervention
9 juillet 2011

Qqun m'a donnée la solution sur un autre forum, je la colle au cas où il y aurait des interressés.

#(\[[^\]]+\])|([a-zA-Z0-9][^ $]*)#
Messages postés
340
Date d'inscription
dimanche 18 septembre 2005
Statut
Membre
Dernière intervention
22 octobre 2009

Bonjour,

C'est peut-être à cause du $ dans ton pattern. Cela cherche donc uniquement la partie "\s+(\w+)\s" uniquement pour une fin de chaine.

J'utiliserais, de préférence, le pattern suivant :

#(\s\w+?\s|\[[^\]+?]\])#

Cordialement
Messages postés
70
Date d'inscription
lundi 3 août 2009
Statut
Membre
Dernière intervention
9 juillet 2011

bonjour et merci pour votre aide

cependant ceci avec :
preg_match_all('#(\s\w+?\s|\[[^\]+?]\])#', $search, $occ)

ne trouve pas d'occurences pour l'exemple : toto [est un] idiot

et dans la finalité voici ce que j'aimerai avoir
array(0 => 'toto', 1 => 'est un', 2 => 'idiot');
au lieu de
array(0 => 'toto', 1 => '[est un]', 2 => 'idiot');