使用php从给定的链接中提取数据

问题描述

我想从此链接提取ID,我正在尝试以下方法。谁能指导我这是什么错误

$url="https://item.tbao.com/item.htm?id=570147082697";
$regular = '/id\=(.+?)\&/';
preg_match($regular,$url,$data,PREG_OFFSET_CAPTURE,3);

我希望有570147082697,但现在没有任何输出

解决方法

我建议使用以下正则表达式:

(?<=id\=).+?(?=\&|$)

详细信息:

  • (?<=id\=).+?:我们获得参数id的值,直到字符&或行尾之前,但没有得到字符串id =
  • (?=\&|$):如果字符是&或行尾

要测试的代码:

//case1: just only id
$url="https://item.tbao.com/item.htm?id=570147082697";
$regular = '/(?<=id\=).+?(?=\&|$)/';
preg_match($regular,$url,$data,PREG_OFFSET_CAPTURE,3);

echo "case1\n";
print_r($data);

//case2: param id is leading
$url="https://item.tbao.com/item.htm?id=570147082697&test=abc";
$regular = '/(?<=id\=).+?(?=\&|$)/';
preg_match($regular,3);

echo "case2\n";
print_r($data);

//case3: param id is between two params
$url="https://item.tbao.com/item.htm?version=5.1&id=570147082697&test=abc";
$regular = '/(?<=id\=).+?(?=\&|$)/';
preg_match($regular,3);

echo "case3\n";
print_r($data);

结果:

case1
Array
(
    [0] => Array
        (
            [0] => 570147082697
            [1] => 34
        )

)
case2
Array
(
    [0] => Array
        (
            [0] => 570147082697
            [1] => 34
        )

)
case3
Array
(
    [0] => Array
        (
            [0] => 570147082697
            [1] => 46
        )

)

希望我的建议能对您有所帮助。