【问题标题】:preg_match_all specific directory/path using phppreg_match_all 使用 php 的特定目录/路径
【发布时间】:2020-10-14 11:49:03
【问题描述】:

我正在尝试从页面获取所有链接,但我想匹配特定的目录/路径。我目前正在使用以下代码:

preg_match_all("/a[\s]+[^>]*?href[\s]?=[\s\"\']+(.*?)[\"\']+.*?>([^<]+|.*?)?<\/a>/is", $sPageContent, $aResults);

上面的代码获取页面的所有链接,但我需要从特定目录获取链接的解决方案,我喜欢将目录/路径与 /music/music/ 匹配。

例如,我有这些链接:

https://www.example.co.uk/music/music/397/adoramus-te/
https://www.example.co.uk/music/music/3113/obsesi/
https://www.example.co.uk/music/music/2707/the-piano/
https://www.example.co.uk/music/music/2677/irreemplazable/
https://www.example.co.uk/music/music/25981/lo/
https://www.example.co.uk/music/top/1243/core/
https://www.example.co.uk/music/top/12/late/
https://www.example.co.uk/music/top/13/new/

从上面的链接中,我想获取所有看起来像这样的链接:

https://www.example.co.uk/music/music/397/adoramus-te/
https://www.example.co.uk/music/music/3113/obsesi/
https://www.example.co.uk/music/music/2707/the-piano/
https://www.example.co.uk/music/music/2677/irreemplazable/
https://www.example.co.uk/music/music/25981/lo/

但忽略所有其他链接

【问题讨论】:

  • 看起来您正试图从锚点获取 href。您可以使用例如 domdocument 来查找所有锚点,获取 href 和匹配 https?://[^/]*/music/music/\S+
  • 谢谢,但是因为在这种情况下我完全可以使用你的代码,我应该把它放在这里:preg_match_all("/a[\s]+[^>]*?href[\s]? =[\s\"\']+(.*?)[\"\']+.*?>([^/is", $sPageContent, $aResults);
  • 如果您将 preg_match_all 行替换为 preg_match_all('/(?&lt;=a href=")(.*)music\/music(.*)(?=")/', $sPageContent, $aResults); 它应该匹配您正在寻找的模式
  • 答案成功了吗?

标签: php preg-match-all


【解决方案1】:

您可以使用例如DOMDocument 来获取数据,然后从中获取所有锚点。

然后使用模式从 https:// 之后的第一个正斜杠开始匹配 /music/music/

^https?://[^/]+/music/music/\S+$

说明

  • ^ 字符串开始
  • https?:// 将协议与可选的s 匹配
  • [^/]+ 匹配除 / 之外的任何字符 1+ 次
  • /music/music/ 字面上匹配
  • \S+ 匹配 1+ 次非空白字符
  • $字符串结束

Regex demo | Php demo

示例代码

$dom = new DOMDocument();
$dom->loadHTML($data);
$anchors = $dom->getElementsByTagName("a");

foreach ($anchors as $anchor) {
    $url = $anchor->getAttribute("href");
    if (preg_match("~^https?://[^/]+/music/music/\S+$~", $url)) {
        echo $url . PHP_EOL;
    }
}

输出

https://www.example.co.uk/music/music/397/adoramus-te/
https://www.example.co.uk/music/music/3113/obsesi/
https://www.example.co.uk/music/music/2707/the-piano/
https://www.example.co.uk/music/music/2677/irreemplazable/
https://www.example.co.uk/music/music/25981/lo/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2021-12-12
    相关资源
    最近更新 更多