php - 解析 javascript 源代码文本并填充两个数组
问题描述
我正在尝试使用 php 解析网页中的一些数据。我拥有的是一个包含以下行的 html 页面:
var VALUES = new Array();
VALUES[0] = new Array("70","09/11/2020 00.00","7.3","");
VALUES[3] = new Array("73","09/11/2020 00.15","7.5","");
VALUES[6] = new Array("75","09/11/2020 00.30","7.4","");
VALUES[9] = new Array("78","09/11/2020 00.45","7.8","");
VALUES[12] = new Array("81","09/11/2020 01.00","8.1","");
...
我需要填充两个不同的数组(datetime
和temp
)
例如,第一行将产生这些元素:
$datetime[0] = "09/11/2020 00.00";
$temp[0] = 7.3;
等等。
我真的是用 php 做这件事的新手,我对模式语法几乎一无所知。我想做的是这样的:
$content=file_get_contents($pageURL);
preg_match('#VALUES[*] = new Array(*)#',$content,$match);
解决方案
^
表示使用m
模式修饰符时的行首(在模式的末尾)。\d
用于匹配数字字符。+
表示一个或多个上述表达式。*
表示前面表达式的零个或多个。(
...)
是一个捕获组——它们决定了匹配数组中保留的值。- 我建议对双引号之间未知的字符使用否定字符类。
[^"]
有关更多详细信息,我建议使用 regex101.com 作为沙箱,因为它会在您进行时说明所有内容。
代码:(演示)
$content = <<<TEXT
var VALUES = new Array();
VALUES[0] = new Array("70","09/11/2020 00.00","7.3","");
VALUES[3] = new Array("73","09/11/2020 00.15","7.5","");
VALUES[6] = new Array("75","09/11/2020 00.30","7.4","");
VALUES[9] = new Array("78","09/11/2020 00.45","7.8","");
VALUES[12] = new Array("81","09/11/2020 01.00","8.1","");
TEXT;
$datetime = [];
$temp = [];
preg_match_all('~^VALUES\[(\d+)] = new Array\("[^"]*","([^"]*)","([^"]*)"~m', $content, $out, PREG_SET_ORDER);
foreach ($out as $m) {
$datetime[$m[1]] = $m[2];
$temp[$m[1]] = $m[3];
}
var_export($datetime);
echo "\n---\n";
var_export($temp);
输出:
array (
0 => '09/11/2020 00.00',
3 => '09/11/2020 00.15',
6 => '09/11/2020 00.30',
9 => '09/11/2020 00.45',
12 => '09/11/2020 01.00',
)
---
array (
0 => '7.3',
3 => '7.5',
6 => '7.4',
9 => '7.8',
12 => '8.1',
)
如果您想忽略/取消识别每行中的行中的 id,请不要捕获 id。
preg_match_all('~^VALUES\[\d+] = new Array\("[^"]*","([^"]*)","([^"]*)"~m', $content, $out, PREG_SET_ORDER);
foreach ($out as $m) {
$datetime[] = $m[1];
$temp[] = $m[2];
}
推荐阅读
- javascript - JavaScript - 将基于网站 URL 的 HAR 文件保存到 .js 文件的位置
- php - 使用 fetch api 时 $_REQUEST 获取参数但不获取 $_POST
- java - 简单 java 类中的 getResources() 错误
- java - java正则表达式从文本中检索链接
- webpack - webpack 可以像聚合物 cli 一样工作吗?
- javascript - 无法在 firebase 中捕获 .on() 的错误
- r - 为 R 中的单个列重新编码值(包括 NULL 值)
- python - 如何永久记录/更新一些值得统计的字符,python
- javascript - 如何使链接按钮内容可编辑
- java - 将 Java ArrayList 与自定义对象一起使用