2012-10-30 120 views
-1

我使用这个正则表达式过滤从网页.pdffiles:正则表达式过滤链接

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

它的工作,如果该链接是这样的:

www.xyz.com/trgrrtr/ghtty.pdf 

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

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

什么正则表达式我应该用来过滤掉这个l从网页上的墨水?

回答

0

首先,您需要跳过?,否则它只是使其前面的f可选。然后你可以这样做:

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

使用否定字符类可确保您不能离开属性。 (.*可能会消耗属性结束"为好,并继续,直到"另一双引号进一步向下匹配字符串)。

但我真的建议你使用DOM解析器先找到链接元素。 PHP有一个built-in one,并有一个非常好的和方便的3rd-party alternative

+0

@ m-buettner您的代码正在删除域名。例如它只显示/fjfrkr/fgfj.pdf不是域名 – raju

+0

@PayalMalhotra对不起,但我不能重现这一点。你能显示你的输入字符串的相关部分吗? –

+0

@PayalMalhotra似乎没事,但我真的是指你的**输入字符串**而不是你的代码;) –