我需要使用正则表达式来捕获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)。
我的错误是什么?
答案 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"'])+("|')?