首页 > 解决方案 > 正则表达式根据用户名从 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
        )

)

标签: phpregex

解决方案


不幸的是,我不熟悉电报信使。不是我几乎可以肯定你的问题不能(很容易)用正则表达式解决。规则有太多的例外。所以我将提供两种选择:

  1. 使用适当的 HTML 解析器,丢弃不需要的内容,捕获相关信息。

  2. 使用黑客

    • 解析 HTML
      • 扔掉所有没有带来相关信息的东西
      • 你最终会得到一个名称和链接列表
    • 如果一个名字后面跟着另一个名字,删除它,因为它没有链接;
    • 加载数组中剩余的任何内容,以及与其相应用户关联的链接。

解析后,您将拥有类似于以下内容的结构:

  • 姓名
    • 关联
    • 关联
  • name <--- 在将数据加载到数组中之前,您将删除它
  • 姓名
    • 关联
  • ...

您可以使用字符串函数甚至正则表达式来进行解析和删除。


推荐阅读