PHPの正規表現を使って2次元行列を解析して取得したいです。しかし、私は本当にパーサーして配列(一次元)を取得することを知りません。たとえば、次の文字列があります。
$str = {a}&{b}&{c}&{d&};
そして、次のように配列に変換したい:
array( 'a', 'b', 'c', 'd&' )
パターンは次のようになります。
$pattern = '#(({[^}]+})(?:&(?1))*#';
パターンは正しく一致しますが、 $matches パラメーターを使用してすべての要素を取得することはできません:
preg_match_all( $pattern, $str, $matches );
print_r( $matches );
出力:
Array
(
[0] => Array
(
[0] => {a}&{b}&{c}&{d&}
)
[1] => Array
(
[0] => a
)
)
括弧付きの再帰パターンを含むこの問題を解決しようとしています。
$pattern = '#(({[^}]+})(?:&((?1)))*#';
出力:
Array
(
[0] => Array
(
[0] => {a}&{b}&{c}&{d&}
)
[1] => Array
(
[0] => a
)
[2] => Array
(
[0] => d&
)
)
配列の最後の要素のみを取得します。オプションフラグ PREG_PATTERN_ORDER または con PREG_SET_ORDER は私の問題を解決していません。
要素の配列を取得する方法はありますか?
ご挨拶と感謝!