2013-02-21 36 views
0

我遇到了使用preg_match_all匹配链接的href部分的问题,目前它捕获3个部分(完整链接,仅链接,仅链接文本),这是完美的,但只有url捕获位于href标签之后的任何其他标签。preg_match_all正确匹配href部分

此外,如何使“href”文本不区分大小写?

代码:

$content = '<a href="http://www.google.com" target="_blank">Google</a> is a search engine. <a href="http://www.yahoo.com" title="yahoo" target="_blank">Yahoo</a> is a search engine.'; 

preg_match_all('/<a href="([^<]*)">([^<]*)<\/a>/', $content, $matches); 

print_r($matches); 

结果:

Array 
(
    [0] => Array 
     (
      [0] => <a href="http://www.google.com" target="_blank">Google</a> 
      [1] => <a href="http://www.yahoo.com" title="yahoo" target="_blank">Yahoo</a> 
     ) 

    [1] => Array 
     (
      [0] => http://www.google.com" target="_blank 
      [1] => http://www.yahoo.com" title="yahoo" target="_blank 
     ) 

    [2] => Array 
     (
      [0] => Google 
      [1] => Yahoo 
     ) 

) 
+2

[不使用正则表达式解析HTML(HTTP: //stackoverflow.com/a/1732454/344643)。改为使用[XML解析器](http://php.net/manual/en/class.domdocument.php)。 – 2013-02-21 22:25:19

+0

@WaleedKhan啊,永远不会变老:D – Doorknob 2013-02-21 22:25:33

+0

我会查看domdocument,谢谢! – Joe 2013-02-21 22:46:43

回答

2

你开始了寻找>并没有采取在考虑任何其他属性。尝试

/<a href="([^"]*)"[^>]+>([^<]*)<\/a>/ 

它将会拉出HREF,请跳过其余属性,然后拉出HTML直到下一个标签

+0

这也会匹配这样的网址:Text Deb 2014-02-03 16:19:41