获取href值的内容

时间:2011-10-28 12:01:33

标签: php href

我需要使用正则表达式来捕获href的内容。例如,当我应用规则时 href =“www.google.com”,我想获得www.google.com。另外,我想忽略所有只有#值的hrefs。

现在,我正在玩一段时间,我想出了这个:

href=(?:\"|\')((?:[^#]|.#.|.#|#.)+)(?:\"|\')

当我在http://www.rubular.com/中尝试它时,它就像一个魅力,但我需要在PHP中使用它与preg_replace_callback,并且我没有得到预期的结果(在PHP中测试它,我是使用此网站:http://www.pagecolumn.com/tool/pregtest.htm)。

我的错误是什么?

3 个答案:

答案 0 :(得分:9)

由于使用正则表达式解析HTML是Bad Thing™,我建议使用一种不那么粗糙的方法:

$dom = new DomDocument;
$dom->loadHTML($pageContent);

$elements = $dom->getElementsByTagName('a');

for ($n = 0; $n < $elements->length; $n++) {
    $item = $elements->item($n);
    $href = $item->getAttribute('href');
    // here's your href attribute
}

答案 1 :(得分:1)

怎么样:

href\s*=\s*"([^#"]+#?[^"]*)"

答案 2 :(得分:1)

首先:不要将注释用于PARSE HTML


我会选择类似的东西:

href=("|')?([^\s"'])+("|')?
相关问题