次の PHP コードがあるとします。
<?php
$str = '/foo/bar/baz';
preg_match('#^(/[^/]+?)*$#', $str, $matches);
var_dump($matches);
...次の出力が得られます。
array (size=2)
0 => string '/foo/bar/baz' (length=12)
1 => string '/baz' (length=4)
…が、理由がわかりません。(/[^/]+?)
の各一致が独自のグループにキャプチャされ、 にスタックされることを期待し$matches
ます。代わりに、次のようになります。
array (size=4)
0 => string '/foo/bar/baz' (length=12)
1 => string '/foo' (length=4)
2 => string '/bar' (length=4)
3 => string '/baz' (length=4)
私は何が欠けていますか?
編集:
これは、代わりに使用した場合の出力ですが、preg_match_all()
まだ探しているものではありません:
array (size=2)
0 =>
array (size=1)
0 => string '/foo/bar/baz' (length=12)
1 =>
array (size=1)
0 => string '/baz' (length=4)