如何使用preg_match php

时间:2019-12-29 10:25:25

标签: php regex

我想从url内容中提取版本号。我试图使用curl_exec提取信息。但无法获取preg_match来获取确切信息。

我尝试的代码是

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“:{”语言“:[”英语“,”法语“,”德语“,”意大利语“,”西班牙语“],”类型“:[” pkg“],”版本“: [“ 3.4.0.1012”,“ 2.1.0804”,“ 2.0.0625”,“ 1.1.1.0301”,“ 1.1.0.0128”],“大小”:“ 139.13MB”,“发布”:“ 10/15 / 19“,” os“:”“,” down“:” / pub / foxit / reader / desktop / mac / 3.x / 3.4 / ML / FoxitReader340.setup.pkg“,” mirror“:”“,” manual “:”“,” big_version“:” 3.x“}} 1”

如何从内容中提取3.4.0.1012。 我尝试的preg_matcxh给了我错误。如何编写preg_match正则表达式。

请帮忙。

2 个答案:

答案 0 :(得分:3)

更好地将字符串转换为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];

答案 1 :(得分:0)

在您的模式中,:\["之后的这部分"version" 您还将使用2个捕获组,因此$matches[1]将包含整个匹配项,而$matches[2]将包含您的值。

但是,您可以使用1个捕获组。

"version":\["(\d+(?:\.\d+){3})"

Regex demo | Php demo

preg_match('~"version":\["(\d+(?:\.\d+){3})"~', $content, $matches);
echo $matches[1];

输出

3.4.0.1012

请注意,您不必转义双引号,而必须使用delimiters作为模式。