-1

我正在使用这个正则表达式来过滤网页中的 .pdffiles:

    $regex='|<a.*?href="(.*pdf?)"|';

如果链接是这样的,它就可以完成工作:

 www.xyz.com/trgrrtr/ghtty.pdf

但如果链接是这样的,则无法过滤:

 www.xyz.com/trgrrtr/ghtty.pdf?code=KksRHhdVXAoECBFCVFpeXBsBUgYMDQpxd3J2d3F2fDtzfnFuLiErNXNpIG5kYm16aGhpcmxoa05QV1VKUVFFUxQ%3D

我应该使用什么正则表达式从网页中过滤掉这个链接?

4

2 回答 2

0

博客文章An Improvement Liberal, Accurate Regex Pattern for Matching URLs可能会有所帮助。

于 2012-10-30T16:08:53.617 回答
0

首先,您需要转义,?否则它只会使其f前面的可选。然后你可以做这样的事情:

$regex = '|<a.*?href="([^"]*\.pdf\?[^"]*)"|';

使用否定字符类确保您不能离开该属性。(.*也可以使用属性结尾",并继续直到"匹配字符串下方的另一个双引号。)

但我真的建议您首先使用 DOM 解析器来查找链接元素。PHP 有一个内置的,并且有一个非常好的和方便的 3rd-party 替代方案

于 2012-10-30T16:09:17.733 回答