【发布时间】: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('/(?<=a href=")(.*)music\/music(.*)(?=")/', $sPageContent, $aResults);它应该匹配您正在寻找的模式 -
答案成功了吗?
标签: php preg-match-all