2

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 は私の問題を解決していません。

要素の配列を取得する方法はありますか?

ご挨拶と感謝!

4

3 に答える 3

1

中括弧内のコンテンツをキャプチャし、構文をチェックするこのパターンを使用できます(ie {..}&{..}&{..}&{..})  :

preg_match_all('~\G{([^}]+)}(?:&|$)~', '{a}&{b}&{c}&{d&}', $result);

\G「前の一致に隣接するか、文字列の先頭にある」ことを意味します。したがって、ギャップは許可されず、構文はパターンによってチェックされます。

あなたが探している配列は$result[1]

于 2013-11-08T00:12:31.297 に答える