2013-11-20 17 views
0

我想从包含相关链接的html页面中提取所有链接。我使用正则表达式来获取所有网址 - 这很容易 - 但我也想找到相关链接。所以,我希望能够找到:PHP从文本中提取相关链接

<a href="http://www.google.com">Some Link</a> 

,我也希望能够找到

<a href="somepage.php">Some Other Link</a> 

我需要让我使用尽可能少的内存尽可能快地做到这一点试图避免使用DOM的东西等。有人有主意吗?

+2

所以,你可以只查找'href'和'src'属性?你需要它来获得_all_链接,或者只是属性中的链接? –

回答

2

只是想这样的事情。它够了吗?

$a = '<a href="http://www.google.com">Some Link</a>'; 
$p = '/href=\"(?<href>.*?)\">(?<content>.*?)</'; 
preg_match_all($p, $a, $m); 
var_dump($m); 

$b = '<a href="somepage.php">Some Other Link</a>'; 
preg_match_all($p, $b, $m2); 
var_dump($m2); 

如果您不需要参考<href>,让您访问诸如$m['href']数据你可以脱下所以图案变得

$p = '/href=\"(.*?)\">(.*?)</';

+0

谢谢!这就是诀窍! – user2395126

+0

所以,现在你可以标记答案为正确的答案;-) – ilpaijin

+0

哈耶,对不起,有点新的堆栈! – user2395126

0

如何

\<a.*?(?:href=['"](.*)?['"]|\>) 
+0

euhm字符类'[]'和捕获组''''有很大的区别'...) – HamZa

+0

@HamZa我基本上使用'[]'作为'或'因为我相信'()'消耗更多的内存通过保存匹配':/'它可以工作 –

+1

简单地说,'[ab]'可以匹配'a'或者'b'。它与'(a | b)'相同,井'(a | b)'将它添加到捕获组中。你可以使用一个非捕获组“(?:a | b)'。但'[a | b]'意味着'匹配a或b或文字|'。 – HamZa