php - 正则表达式根据用户名从 href 属性中提取 URL
问题描述
我正在尝试提取来自特定用户的所有链接,但我的正则表达式只抓取一个链接:
HTML:
<div class="from_name">
USERNAME
</div>
<div class="media_wrap clearfix">
<div class="media clearfix pull_left media_photo">
<div class="fill pull_left">
</div>
<div class="text">
<a href="https://google.com</a>
</div>
</div>
<div class="text">
<a href="https://yahoo.com</a>
</div>
</div>
代码:
preg_match_all('/USERNAME[\s\S]*?href="(.*?)</', $data, $matches);
print_r($matches);
//输出,它只是 caputre google.com :
Array
(
[0] => Array
(
[0] => FullCapture
[1] => Array
(
[0] => https://google.com
)
)
解决方案
不幸的是,我不熟悉电报信使。不是我几乎可以肯定你的问题不能(很容易)用正则表达式解决。规则有太多的例外。所以我将提供两种选择:
使用适当的 HTML 解析器,丢弃不需要的内容,捕获相关信息。
使用黑客
- 解析 HTML
- 扔掉所有没有带来相关信息的东西
- 你最终会得到一个名称和链接列表
- 如果一个名字后面跟着另一个名字,删除它,因为它没有链接;
- 加载数组中剩余的任何内容,以及与其相应用户关联的链接。
- 解析 HTML
解析后,您将拥有类似于以下内容的结构:
- 姓名
- 关联
- 关联
- name <--- 在将数据加载到数组中之前,您将删除它
- 姓名
- 关联
- ...
您可以使用字符串函数甚至正则表达式来进行解析和删除。
推荐阅读
- delphi - 如何使用 MessageDlg 禁用等待光标
- firebase - Value Provider 首次返回 null
- node.js - webpack-dev-server 在错误的端口上发出 sockjs 请求
- java - 我应该将 RestController 放在 spring boot 项目中的哪个位置
- javascript - How to trim in v-if vue js
- javascript - 无法识别通过 ReactJS 发送函数中的道具传递 websocket
- http - 隐身或私有模式 http 请求
- java - Java 128 位融合乘除法 - 有没有有效的算法?
- xamarin - 默认情况下,Xamarin 在哪里存储您的应用程序密钥库?
- python - 如何在烧瓶应用程序中嵌入一个情节地图框?