如何使用preg_match php从web内容中提取版本号
我想从url内容中提取版本号。我尝试使用curl_exec提取信息。但无法获得preg_匹配以获得确切信息 我试过的代码是如何使用preg_match php从web内容中提取版本号,php,regex,Php,Regex,我想从url内容中提取版本号。我尝试使用curl_exec提取信息。但无法获得preg_匹配以获得确切信息 我试过的代码是 function getVersionFromurl(string $url) { $curl = curl_init($url); $content = curl_exec($curl); curl_close($curl); $rx = preg_match("(\"version\" (\d+\.\d+\.\d+\.\d+))", $c
function getVersionFromurl(string $url)
{
$curl = curl_init($url);
$content = curl_exec($curl);
curl_close($curl);
$rx = preg_match("(\"version\" (\d+\.\d+\.\d+\.\d+))", $content, $matches);
echo $matches[1];
}
$url = 'https://www.foxitsoftware.com/downloads/downloadForm.php?retJson=1&product=Foxit-Reader&platform=Mac-OS-X';
$val = getVersionFromurl($url);
这里的内容是
“{”package_info:“{”language:[“英语”、“法语”、“德语”、“意大利语”、“西班牙语”],“类型”:[“pkg”],“版本”:[“3.4.0.1012”、“2.1.0804”、“2.0.0625”、“1.1.1.0301”、“1.1.0.0128”],“大小”:“139.13MB”、“发布”:“10/15/19”、“操作系统”:“向下”:“/pub/foxit/reader/desktop/mac/3.x/3.4/ML/FoxitReader340.setup.pkg”、“镜像”:“手动版”:“big.x}”
如何从内容中提取3.4.0.1012。
我试过的preg_matcx给了我错误。如何编写preg_match正则表达式
请提供帮助。最好将字符串转换为JSON对象,并从中获取版本值
function getVersionFromurl(string $url)
{
$curl = curl_init($url);
$content = curl_exec($curl);
curl_close($curl);
$contentObj = json_decode($content);
echo $contentObj.package_info.version[0];
}
$url = 'https://www.foxitsoftware.com/downloads/downloadForm.php?retJson=1&product=Foxit-Reader&platform=Mac-OS-X';
$val = getVersionFromurl($url);
注意从字符串到对象的转换,并获取版本数组的第一个元素
$contentObj = json_decode($content);
echo $contentObj.package_info.version[0];
最好将字符串转换为JSON对象,并从中获取版本值
function getVersionFromurl(string $url)
{
$curl = curl_init($url);
$content = curl_exec($curl);
curl_close($curl);
$contentObj = json_decode($content);
echo $contentObj.package_info.version[0];
}
$url = 'https://www.foxitsoftware.com/downloads/downloadForm.php?retJson=1&product=Foxit-Reader&platform=Mac-OS-X';
$val = getVersionFromurl($url);
注意从字符串到对象的转换,并获取版本数组的第一个元素
$contentObj = json_decode($content);
echo $contentObj.package_info.version[0];
在您的模式中,您没有考虑此部分
:\[“
在“版本”
您还使用了两个捕获组,因此$matches[1]
将包含整个匹配,而$matches[2]
将包含您的值
但是,您可以使用1个捕获组
"version":\["(\d+(?:\.\d+){3})"
|
输出
3.4.0.1012
注意您不必转义双引号,并且必须用于模式。在您的模式中,您没有考虑此部分
:\[“
在版本之后”
您还使用了两个捕获组,因此$matches[1]
将包含整个匹配,而$matches[2]
将包含您的值
但是,您可以使用1个捕获组
"version":\["(\d+(?:\.\d+){3})"
|
输出
3.4.0.1012
请注意您不必转义双引号,并且必须用于模式。您的模式可能看起来像
“version”:\[“(\d+(?:\。\d+){3})”
您的模式可能看起来像“version”:\[“(\d+(?:\。\d+){3}”
看到我在第8行的/workspace/Main.PHP中得到错误“PHP通知:未定义的偏移量:1”。对于“echo$matches[1];”它看起来像preg_match没有返回任何内容。你确定你有相同的负载吗?字符串是什么样子的?我在第8行的/workspace/Main.PHP中得到错误“PHP通知:未定义的偏移量:1”。对于“echo$matches[1];”看起来preg_match没有返回任何内容。您确定您有相同的负载吗?字符串是什么样子的?