我试图在页面来源中匹配:
<a href="/download/blahbal.html">
我查看了此网站上的另一个链接并使用了正则表达式:
'/<a href=["\']?(\/download\/[^"\'\s>]+)["\'\s>]?/i'
返回页面上的所有href链接,但它在某些链接上错过了.html。
非常感谢任何帮助。
谢谢
答案 0 :(得分:1)
首先使用方法described here检索所有href,然后您可以使用正则表达式或strpos来“过滤”那些不以/ download /开头的人。
堆栈溢出(see this)上的许多其他帖子中讨论了你应该使用解析器而不是正则表达式的原因。解析完文档并获得所需的href后,您可以使用简单的函数对其进行过滤。
一点代码:
$dom = new DOMDocument;
//html string contains your html
$dom->loadHTML($html);
//at the end of the procedure this will be populated with filtered hrefs
$hrefs = array();
foreach( $dom->getElementsByTagName('a') as $node ) {
//look for href attribute
if( $node->hasAttribute( 'href' ) ) {
$href = $node->getAttribute( 'href' );
// filter out hrefs which don't start with /download/
if( strpos( $href, "/download/" ) === 0 )
$hrefs[] = $href; // store href
}
}