0

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

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

$links = ($matches[0]);

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

我将如何修改它以提取不是所有链接,而只是提取与某个部分 url 匹配的链接,在这种情况下:` http ://www.site.com/artist/ ' 我正在寻找的结果是一个类似的列表:

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

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

等等。

4

3 回答 3

0

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

http://www.site.com/artist/ .*\b

更新 1:

如果您使用的是 PHP,请尝试以下操作:

preg_match_all('%http://www\.site\.com/artist/.*\b%', $html, $urls, PREG_PATTERN_ORDER);
$urls = $urls[0];
于 2013-08-07T01:39:13.733 回答
0
$regex = 'http:\/\/www.site.com\/artist\/[^" ]+\/';

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

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

于 2013-08-07T01:42:50.703 回答
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 />';
}
于 2013-08-07T01:54:51.353 回答