使用正则表达式从页面中提取网址

时间:2013-08-07 01:35:31

标签: php regex

我有一点php从页面中提取所有网址:

$regex = '/https?\:\/\/[^\" ]+/i';
preg_match_all($regex, $page, $matches);

$links = ($matches[0]);

foreach($links as $link)
{
  echo $link.'<br />';
}

如何修改它以提取不是所有链接,而只提取与某个部分网址相匹配的链接,在这种情况下:`http://www.site.com/artist/'其中我要查找的结果是如下列表:

http://www.site.com/artist/Nirvana/

http://www.site.com/artist/Jayz/

等等。

3 个答案:

答案 0 :(得分:0)

这些网址在哪里?他们在网页上吗?试试这个:

  

http://www.site.com/artist/。* \ B'/ P>

更新1:

如果您使用的是PHP,请尝试以下方法:

preg_match_all('%http://www\.site\.com/artist/.*\b%', $html, $urls, PREG_PATTERN_ORDER);
$urls = $urls[0];

答案 1 :(得分:0)

$regex = 'http:\/\/www.site.com\/artist\/[^" ]+\/';

当然,artist部分之后的内容取决于被认为是可接受的输入。

如果您只接受字母和数字,请使用[a-zA-Z0-9]+

答案 2 :(得分:0)

通过将分隔符更改为感叹号,不需要额外的转义字符。 \s字符类匹配空格字符,如制表符,空格和新行。我还要确保我们涵盖两种类型的报价(如果页面不同)。

$regex = '!https?://www.site.com/artist/[^\'"\s]+!i';
preg_match_all($regex, $page, $matches);

$links = ($matches[0]);

foreach($links as $link)
{
  echo $link.'<br />';
}