php - 使用正则表达式从 HTML 文档中的链接中提取 URL

标签 php regex preg-match-all

我需要捕获给定 html 中的所有链接。

示例代码如下:

<div class="infobar">
    ... some code goes here ...
    <a href="/link/some-text">link 1</a>
    <a href="/link/another-text">link 2</a>
    <a href="/link/blabla">link 3</a>
    <a href="/link/whassup">link 4</a>
    ... some code goes here ...
</div>

我需要获取 div.infobar 中以 /link/ 开头的所有链接

我试过这个:

preg_match_all('#<div class="infobar">.*?(href="/link/(.*?)") .*?</div>#is', $raw, $x);

但它给了我唯一的第一场比赛。

感谢您的建议。

最佳答案

我建议使用 DOMDocument为此目的而不是使用正则表达式。考虑以下简单代码:

$content = '
<div class="infobar">
    <a href="/link/some-text">link 1</a>
    <a href="/link/another-text">link 2</a>
    <a href="/link/blabla">link 3</a>
    <a href="/link/whassup">link 4</a>
</div>';
$dom = new DOMDocument();
$dom->loadHTML($content);

// To hold all your links...
$links = array();

// Get all divs
$divs = $dom->getElementsByTagName("div");
foreach($divs as $div) {
  // Check the class attr of each div
  $cl = $div->getAttribute("class");
  if ($cl == "infobar") {
    // Find all hrefs and append it to our $links array
    $hrefs = $div->getElementsByTagName("a");
    foreach ($hrefs as $href)
       $links[] = $href->getAttribute("href");
  }
}
var_dump($links);

输出

array(4) {
  [0]=>
  string(15) "/link/some-text"
  [1]=>
  string(18) "/link/another-text"
  [2]=>
  string(12) "/link/blabla"
  [3]=>
  string(13) "/link/whassup"
}

关于php - 使用正则表达式从 HTML 文档中的链接中提取 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6461732/

相关文章:

php - X-FRAME-OPTIONS 显示两次,X-XSS-PROTECTION 显示错误

java - 正则表达式替换为增量

php - 此模式的 preg_match_all

php preg_match_all 匹配错误的字符串

php - preg_match() 似乎总是返回 0 个匹配项

php - 使用自定义 MVC 从 JQuery ajax()、PHP 和 MySQL 检索 JSON 数据

php - 无法加载驱动程序 : com. mysql.jdbc.Driver

php - 在 PHP 中压缩可以解码为原始形式的字符串的最佳方法

java - 无效的正则表达式 : Dangling meta character "*"

php - 我需要一个 RegExp 来只匹配拉丁字符而不匹配其他字符