0

{! のような角かっこを含む文字列から配列を作成したい。!}. ただし、カプセル化された文字列の先頭と末尾の空白は表示されません。

$string = "{! This should be in the output !} this should not be in the output {!show_in_output!} don't show {!   show   !}";
preg_match_all("/{!(.*)!}/Us", $string , $output);

結果の配列は次のようになります。

Array
(
    [0] => Array
        (
            [0] => {! This should be in the output !}
            [1] => {!show_in_output!}
            [2] => {!   show   !}
        )

    [1] => Array
        (
            [0] =>  This should be in the output 
            [1] => show_in_output
            [2] =>    show   
        )

)

ただし、次のようになります。

Array
(
    [0] => Array
        (
...
        )

    [1] => Array
        (
            [0] => This should be in the output 
            [1] => show_in_output
            [2] => show   
        )

)

変更された正規表現でこれを達成する方法はありますか? ありがとうございました!

4

1 に答える 1

1

(.*)真ん中にある は、と/{!(.*)!}/の間の任意の文字と一致します。その前後のスペースをキャプチャしたくない場合は、空白を一致させ、空白をグループに含めないでください 。は、2 番目の で一致させたい空白が含まれないように、 の最小限の一致を作成するように指示します。{!!}/{!\s*(.*?)\s*!}/?.*\s*

于 2012-12-05T15:06:59.250 に答える