0

わかりました、私はこの小さなヘルパー関数を持っています

public static function toJSON($arr){
        $json = json_encode($arr);
        return preg_replace_callback('/(?<=:)"function((?:(?!}").)*}"/',
                                    function($string){
                                        return str_replace(array('\"','/','"','n','t'),array('"','/','"','',''),substr($string[0],1,-1));
                                     },$json);
    }

ここで、preg_replace_callback()関数のコールバック用の無名関数を作成しました。1つの括弧を見逃したかどうかをすでに3回チェックしましたが、IDE(zend studio)に閉じられていない括弧が表示されないようです。

私のエラーはこれです

preg_replace_callback()コンパイルに失敗しました:欠落)オフセット30(X:\ xampp \ htdocs \ aya \ protected \ xxx \ xxxArray.php:180

どこが間違っていたの?

:この小さなヘルパー関数の目的は、json出力内に無名関数を作成できるようにすることです。あなたが私にもっと良いスクリプトを勧めることができれば、それは私にとって大きな助けになるでしょう。

4

2 に答える 2

1

に閉じていない括弧があります

'/(?<=:)"function((?:(?!}").)*}"/'

エディターは、文字列のコンテンツを検証しないため、それを見つけられません。

于 2012-07-19T02:48:13.960 に答える
1

元の作者がやろうとしていたことはかなり確信しています:

'/(?<=:)"function((?:(?!}").)*})"/'
                               ^

後で置換するために関数本体 (引数を含む) をキャプチャしたい場合、replace 関数は後で0インデックス (一致全体) を使用するため、最初のもの(も削除できます。

'/(?<=:)"function(?:(?!}").)*}"/'
                 ^
                 +-- a "(" deleted

これも機能します (メモリの消費も少し少なくなります)。

于 2013-11-09T21:33:22.667 に答える