1

文字列を解析する必要があります

{name "some" 'words' `or` '}\'other staff' in:0 line:`\`}

の中へ

array("some","words","or","}'other staff","in"=>0, "line"=>"\\")

、しかし preg はテンプレートに対して 1 つの一致のみを返します。すべての一致を取得するために何かできますか? ここに私の正規表現があります:

    !\{
    (\#?[a-zA-Z0-9\_]{1,16})
    (\.[a-zA-Z0-9\_]{1,16})?
    (?P<args>(?P<arg>
    \ +([a-zA-Z0-9\_]{1,16}\:)?
    \'(\\\\|\\\'|[^\'])*?\'|    //argument in singlequote
    \"([^\\\"]|\\.)*?\"|        //argument in doublequote
    \`[^\`]*?\`|                //argument in backquote
    [0-9]*(\.[0-9]*)?           //argument numeral
    )*?)\ *\}!          

そして私はこれを得る:

array(1) {
  [0]=>
  array(12) {
    [0]=>
    string(57) "{name "some" 'words' `or` '}\'other staff' in:0 line:`\`}"
    [1]=>
    string(4) "name"
    [2]=>
    string(0) ""
    ["args"]=>
    string(51) " "some" 'words' `or` '}\'other staff' in:0 line:`\`"
    [3]=>
    string(51) " "some" 'words' `or` '}\'other staff' in:0 line:`\`"
    [4]=>
    string(9) " line:`\`"
    ["arg"]=>
    string(8) "line:`\`" //last argument
    [5]=>
    string(8) "line:`\`"
    [6]=>
    string(5) "line:"
    [7]=>
    string(3) "`\`"
    [8]=>
    string(1) "f"
    [9]=>
    string(1) "e"
  }
}

最後の引数ではなく、引数の配列を取得するにはどうすればよいですか?

4

1 に答える 1

0

preg で解析する方法はないと思います。文字列関数を使用して記述する必要があります。

于 2012-05-02T21:12:01.073 に答える