php - 使用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, $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
)
)
希望我的建议可以帮到你。
推荐阅读
- java - 将枚举反序列化为具有字符串属性的对象
- java - webdriver有哪些不同的chromeoptions
- influxdb - Influx CLI 执行在 WHERE 子句中找不到标签
- css - 无法环绕文本,图像和滑动覆盖也无法正常工作
- c++ - 为什么 QByteArray 的大小是`int`而不是`unsigned int`
- java - JAVA Apache POI 错误文件写入输出
- rest - REST:通过不同的标识符更新资源?
- hyperledger-fabric - 每次访问都会创建 .hfc-key-store 证书
- ios - iOS 应用程序身份验证和 API
- php - 如何在子查询laravel eloquent with condition中使用“With”?