首页 > 解决方案 > 使用php从给定链接中提取数据

问题描述

我想从此链接中提取 id,我正在尝试以下操作。谁能指导我是什么错误

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

我希望有这个 570147082697 但我现在没有任何输出。

标签: phpregexdebugging

解决方案


我建议遵循正则表达式:

(?<=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, $url, $data, PREG_OFFSET_CAPTURE, 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, $url, $data, PREG_OFFSET_CAPTURE, 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
        )

)

希望我的建议可以帮到你。


推荐阅读