我有一点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/
等等。
答案 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 />';
}