42 votes

Capturer du texte entre crochets en PHP

J'ai besoin d'un moyen de capturer le texte entre crochets. Ainsi, par exemple, la chaîne suivante :

[This] is a [test] string, [eat] my [shorts].

Peut être utilisé pour créer le tableau suivant :

 Array ( 
     [0] => [This] 
     [1] => [test] 
     [2] => [eat] 
     [3] => [shorts] 
)

J'ai l'expression régulière suivante, /\[.*?\]/ mais elle ne capture que la première instance, donc :

 Array ( [0] => [This] )

Comment puis-je obtenir la sortie dont j'ai besoin ? Notez que les crochets ne sont JAMAIS imbriqués, ce n'est donc pas un problème.

112voto

Naki Points 1586

Correspond à toutes les chaînes avec des crochets :

 $text = '[This] is a [test] string, [eat] my [shorts].';
preg_match_all("/\[[^\]]*\]/", $text, $matches);
var_dump($matches[0]);

Si vous voulez des chaînes sans crochets :

 $text = '[This] is a [test] string, [eat] my [shorts].';
preg_match_all("/\[([^\]]*)\]/", $text, $matches);
var_dump($matches[1]);

Version alternative et plus lente de la correspondance sans crochets (en utilisant "*" au lieu de "[^]") :

 $text = '[This] is a [test] string, [eat] my [shorts].';
preg_match_all("/\[(.*?)\]/", $text, $matches);
var_dump($matches[1]);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X