2012-10-30 131 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似乎沒事,但我真的是指你的**輸入字符串**而不是你的代碼;) –