PHP正则表达式解析DOM并获取URL

时间:2013-01-15 22:49:25

标签: php html regex parsing

  

可能重复:
  Grabbing the href attribute of an A element

我有一个正则表达式的问题,这个正则表达式工作完美,它解析了大多数链接但是我遇到的问题是当它的解析网址有JavaScript时,例如,如果HTML内容有这个href:

<a href="javascript:fixIt('yes')">anchor text</a>

它不会正确解析网址,而是会解析网址的一半并输出“javascript:fixIt('”所以我试图制作以“javascript:”开头的跳过网址但是它无法正常工作。而且我在我现在已经失去了近4小时的损失

这是我正在使用

的正则表达式
/[\s]+(src|href|url|location|background|action)[\s]*=[\s]*([\'\"\`])?[\s]*([^\'\"\`\s>]+)([\'\"\`>])?/i

这是一个测试样本:

<?php
$html = '<html><head><title>test</title></head><body><a href="http://www.example.com/">works</a>, <a href="javascript:dothis(\'ok\');">breaks</a></body></html>';
$pattren = '/[\s]+(src|href|url|location|background|action)[\s]*=[\s]*([\'\"\`])?[\s]*([^\'\"\`\s>]+)([\'\"\`>])?/i';
preg_replace_callback($pattren, function($r) { var_dump($r); }, $html);
?>

感谢。

1 个答案:

答案 0 :(得分:0)

/[\s]+(src|href|url|location|background|action)[\s]*=[\s]*([\'\"\`])?[\s]*(?!(?:#|javascript\s*:))([^"\']+)([\'\"\`>])?/i