0

PHP から JS ファイルを開き、このファイルで json var を見つけ、それを php 配列に変換する必要があります。

現在、どの正規表現を使用すればよいかわかりません。

// get the js file
$file = file_get_contents ("http://pve.proxmox.com/pve2-api-doc/apidoc.js");

// extract the json content of var pveapi
if ( preg_match ( "#pveapi = ({[^}]*})#", $file, $infoJson ) ) {
    $arrJson = json_decode ( $infoJson [1], true );
}

// shows nothing so far :((
print_r($arrJson);

それを行う例はほとんど見つかりませんでしたが、どれもうまくいきませんでした。正規表現でまともなスキルを持っている人なら誰でも助けてくれますか?

ベン

編集: js ファイルの一部を追加:

var pveapi = [
   {
      "info" : {
         "GET" : {
            "parameters" : {
               "additionalProperties" : 0
            },
            "permissions" : {
               "user" : "all"
            },
            "returns" : {
               "type" : "array",
               "items" : {
                  "type" : "object",
                  "properties" : {}
               },
               "links" : [
                  {
                     "rel" : "child",
                     "href" : "{name}"
                  }
               ]
            },
            "name" : "index",
            "method" : "GET",
            "description" : "Cluster index."
         }
      }
    }
];

Ext.onReady(function() { ... }
4

2 に答える 2

3

この場合、行末のセミコロンを照合することで末尾を見つけることができます。

if (preg_match('/^var pveapi = (.*?);$/ms', $js, $matches)) {
    $data = json_decode($matches[1]);
    print_r($data);
}
于 2015-02-25T13:13:53.957 に答える
0

デフォルトでは、正規表現エンジンは個々の行で貪欲に動作するため、反対のことを行うように指示する必要があります。探していると思われる正規表現は

#\spveapi\s*=\s*(.*?);\s*$#s

それがすることは次のとおりです。

  • #
    表現を始める
  • \s
    変数名の前に空白を付けて、別の変数名の一部にならないようにしてください。
  • pveapi
    変数を見つける
  • \s*=\s*
    オプションの空白を含む等号があることを確認してください
  • (.*?);\s*$
    セミコロンを見つける前にできるだけ少ない文字を取得します。つまり、オプションの空白と行末だけが続く最初のセミコロンまでのすべての文字
  • #ms
    .式を終了し、行末にも一致させ$、各行の終わりに一致 させるように指示します
于 2015-02-25T13:28:49.483 に答える