web-dev-qa-db-fra.com

Capture de 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].

Pourrait ê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 il ne capture que la première instance, donc:

Array ( [0] => [This] )

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

37
Chuck Le Butt

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 plus lente de l'appariement 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]);
94
Naki