如何使用preg_match php从web内容中提取版本号

如何使用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

我想从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+))", $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没有返回任何内容。您确定您有相同的负载吗?字符串是什么样子的?