Javascript 使用PHP和正则表达式解析JS脚本以获取JS变量值
我需要从PHP打开一个JS文件,在该文件中找到一个json变量,并将其转换为PHP数组 现在我不知道该用哪个正则表达式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
// 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
结束表达式,并告诉它让
也匹配行尾,并将
匹配到每行的结尾$
“#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