Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用PHP和正则表达式解析JS脚本以获取JS变量值_Javascript_Php_Regex_Json_Proxmox - Fatal编程技术网

Javascript 使用PHP和正则表达式解析JS脚本以获取JS变量值

Javascript 使用PHP和正则表达式解析JS脚本以获取JS变量值,javascript,php,regex,json,proxmox,Javascript,Php,Regex,Json,Proxmox,我需要从PHP打开一个JS文件,在该文件中找到一个json变量,并将其转换为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, $i

我需要从PHP打开一个JS文件,在该文件中找到一个json变量,并将其转换为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() { ... }

在这种情况下,可以通过在行尾匹配分号来找到结尾:

if (preg_match('/^var pveapi = (.*?);$/ms', $js, $matches)) {
    $data = json_decode($matches[1]);
    print_r($data);
}

在这种情况下,可以通过在行尾匹配分号来找到结尾:

if (preg_match('/^var pveapi = (.*?);$/ms', $js, $matches)) {
    $data = json_decode($matches[1]);
    print_r($data);
}

在这种情况下,可以通过在行尾匹配分号来找到结尾:

if (preg_match('/^var pveapi = (.*?);$/ms', $js, $matches)) {
    $data = json_decode($matches[1]);
    print_r($data);
}

在这种情况下,可以通过在行尾匹配分号来找到结尾:

if (preg_match('/^var pveapi = (.*?);$/ms', $js, $matches)) {
    $data = json_decode($matches[1]);
    print_r($data);
}

默认情况下,正则表达式引擎在各条线路上贪婪地运行,因此您必须告诉它做相反的事情——您似乎正在寻找的正则表达式将是

#\spveapi\s*=\s*(.*?);\s*$#s
它所做的是:

  • #

    启动表达式
  • \s

    确保变量名前面有空格,因此它不是其他变量名的一部分
  • pveapi

    找到变量
  • \s*=\s*

    确保周围有一个带可选空格的等号
  • (*)\s*$

    在查找分号之前,获取尽可能少的字符–即直到第一个分号(后面只有可选空格和行尾)之前的所有字符
  • #ms

    结束表达式,并告诉它让
    也匹配行尾,并将
    $
    匹配到每行的结尾

默认情况下,正则表达式引擎在各条线路上贪婪地运行,因此您必须告诉它做相反的操作–您似乎正在寻找的正则表达式将是

#\spveapi\s*=\s*(.*?);\s*$#s
它所做的是:

  • #

    启动表达式
  • \s

    确保变量名前面有空格,因此它不是其他变量名的一部分
  • pveapi

    找到变量
  • \s*=\s*

    确保周围有一个带可选空格的等号
  • (*)\s*$

    在查找分号之前,获取尽可能少的字符–即直到第一个分号(后面只有可选空格和行尾)之前的所有字符
  • #ms

    结束表达式,并告诉它让
    也匹配行尾,并将
    $
    匹配到每行的结尾

默认情况下,正则表达式引擎在各条线路上贪婪地运行,因此您必须告诉它做相反的操作–您似乎正在寻找的正则表达式将是

#\spveapi\s*=\s*(.*?);\s*$#s
它所做的是:

  • #

    启动表达式
  • \s

    确保变量名前面有空格,因此它不是其他变量名的一部分
  • pveapi

    找到变量
  • \s*=\s*

    确保周围有一个带可选空格的等号
  • (*)\s*$

    在查找分号之前,获取尽可能少的字符–即直到第一个分号(后面只有可选空格和行尾)之前的所有字符
  • #ms

    结束表达式,并告诉它让
    也匹配行尾,并将
    $
    匹配到每行的结尾

默认情况下,正则表达式引擎在各条线路上贪婪地运行,因此您必须告诉它做相反的操作–您似乎正在寻找的正则表达式将是

#\spveapi\s*=\s*(.*?);\s*$#s
它所做的是:

  • #

    启动表达式
  • \s

    确保变量名前面有空格,因此它不是其他变量名的一部分
  • pveapi

    找到变量
  • \s*=\s*

    确保周围有一个带可选空格的等号
  • (*)\s*$

    在查找分号之前,获取尽可能少的字符–即直到第一个分号(后面只有可选空格和行尾)之前的所有字符
  • #ms

    结束表达式,并告诉它让
    也匹配行尾,并将
    $
    匹配到每行的结尾

try
“#pveapi\s*=\s*({[^}]*})”谢谢你的回答,我试过了,但还是一样,不匹配。”/pveapi\s*=\s*([^Ext\.onReady]*)/“如果你知道你需要的pveapi是javascript中var pveapi=的第一个实例,并且你知道pveapi不包含字符串Ext.onReady,你知道,在pveapi之后,有一个Ext.onReady,这个应该可以工作。。。不幸的是,我认为您需要一个成熟的javascript解释器来可靠地获取代码。try
“\pveapi\s*=\s*({[^}]*}”)”
谢谢您的回答,我试过了,但还是一样的,不匹配。”/pveapi\s*=\s*([^Ext\.onReady]*)/“如果您知道您需要的pveapi是javascript中var eapi=的第一个实例,您知道pveapi不包含字符串Ext.onReady,并且您知道在pveapi之后有一个Ext.onReady,这应该可以工作。。。不幸的是,我认为您需要一个成熟的javascript解释器来可靠地获取代码。try
“\pveapi\s*=\s*({[^}]*}”)”
谢谢您的回答,我试过了,但还是一样的,不匹配。”/pveapi\s*=\s*([^Ext\.onReady]*)/“如果您知道您需要的pveapi是javascript中var eapi=的第一个实例,您知道pveapi不包含字符串Ext.onReady,并且您知道在pveapi之后有一个Ext.onReady,这应该可以工作。。。不幸的是,我认为您需要一个成熟的javascript解释器来可靠地获取代码。try
“\pveapi\s*=\s*({[^}]*}”)”
谢谢您的回答,我试过了,但还是一样的,不匹配。”/pveapi\s*=\s*([^Ext\.on