web-dev-qa-db-ja.com

PHPでの角括弧間のテキストのキャプチャ

角かっこで囲まれたテキストをキャプチャする方法が必要です。たとえば、次の文字列:

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

次の配列の作成に使用できます。

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

私は次の正規表現を持っています、/\[.*?\]/ただし、最初のインスタンスのみをキャプチャするため、次のようになります。

Array ( [0] => [This] )

必要な出力を取得するにはどうすればよいですか?角括弧は入れ子にならないため、心配する必要はありません。

37
Chuck Le Butt

角かっこで囲まれたすべての文字列に一致します。

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

括弧なしの文字列が必要な場合:

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

括弧のない代替の低速バージョン(「[^]」の代わりに「*」を使用):

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