使用pre_mattch_all提取SEO网址

时间:2014-11-06 09:06:46

标签: php preg-match-all

我的网页包含指向其他网页的链接。如何提取以特定名称

开头的所有href

喜欢我的网页标签

<a href="shows/film/lop-film/">Some Text</a>
<a href="movie/current/lop-film/">Some Text</a>
<a href="rot.company.com/sow/test/page/asd.mov"></a>


$search = '/<a\s+(?:[^"\'>]+|"[^"]*"|\'[^\']*\')*href=("[^"]+"|\'[^\']+\'|[^<>\s]+)/i'
preg_match_all($search, $Content, $matches);
foreach ($matches[1] as $value) {
     print_r('Links :'.$value);
}

它会提取但返回链接到外部网站和电子邮件的不需要的网址

 http://www.amazon.co.uk/
 mailto:sp@company.com

我主要想过滤以show |开头的比赛电影| domain.name

1 个答案:

答案 0 :(得分:1)

将正则表达式模式更改为

$search = '/<a\s+(?:[^"\'>]+|"[^"]*"|\'[^\']*\')*href=("(show|movie|domain\.name)[^"]+"|\'(show|movie|domain\.name)[^\']+\'|(show|movie|domain\.name)[^<>\s]+)/i';

(show|movie|domain\.name)的复制看起来很难看,但由于你必须用单引号或双引号来处理href属性,所以我找不到更好的方法。一般来说,"'都不应该是网址的一部分,但谁知道..

但是使用HTML Dom通常更好地使用PHP DOMDocument而不是正则表达式。