[RESOLU] Récupérer tous les éléments entre crochets

Eléphant du PHP | 67 Messages

28 nov. 2017, 10:54

Bonjour,

J'ai une chaine de caractères, ave certains mots ou expressions cernés de crochets.
Ex: Bonjour [comment] allez-[vous] ?

Je souhaiterais pouvoir récupérer tous les mots situés entre crochets, mais vous vous en doutez, je n'y parviens pas...

Par avance, merci pour votre aide!

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

28 nov. 2017, 11:08

Bonjour,
Cela se fait avec la fonction preg_match_all()
Et il faut que tu crées une expression régulière pour obtenir ce que tu veux.
Je te recommande d'utiliser le site http://regex101.com pour construire et tester ton expression régulière (regex). Important : les crochets sont des caractères spéciaux dans les expressions régulières donc il faut que tu les "échappes" en mettant un antislash devant : \[ et \]

Essaye par toi même de construire ta regex et reviens vers nous quand tu auras avancé si tu es toujours bloqué.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 67 Messages

28 nov. 2017, 11:13

Ok merci.
Je ne connaissais pas ce site, super pratique pour tester ça.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

28 nov. 2017, 11:34

A noter que si tu cliques sur Save regex, il va te fournir une url unique avec tes données de test que tu peux partager ensuite ici si tu veux un coup de main
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 67 Messages

28 nov. 2017, 11:53

Etrange, j'ai une expression qui fonctionne dans mon code, mais le site me dit que rien ne correspond:
https://regex101.com/r/BKCwry/1

Code : Tout sélectionner

$monTexte = "1 [abc] 2 [def] 3 [ghi] 4 [klm] 5"; $pattern = '#\[[^\]]*\]#'; $result = preg_match_all($pattern, $monTexte, $out); var_dump($out);

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

28 nov. 2017, 12:02

En fait les délimiteurs de la regex (le dièse dans ton cas) est déjà intégré en dur dans regex101.
Si tu le retire de ta regex alors ça fonctionne.
Ma recommandation est d'ailleurs d'utiliser le caractère ` (AltGr + 7) comme délimiteur car il y a moins de risque que ça se retrouve dans une regex qu'un dièse.

Par ailleurs, si tu veux récupérer le texte, tu peux mettre des parenthèses capturantes, comme ceci :
https://regex101.com/r/BKCwry/2
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 67 Messages

28 nov. 2017, 12:04

Super, merci beaucoup pour ton aide et l'adresse du site qui est déjà dans mes favoris. :)