2011-08-04 94 views
0

我需要REGEX幫助,根據插入到HTML頁面的方式,可以找到不同格式的鏈接。PHP preg_match查找並找到來自HTML頁面的動態URL

我可以將頁面讀入PHP。只是無法找到能夠找到URL並隔離它們的正確REGEX。

我有幾個關於如何插入的例子。有時它們是純文本鏈接,有些纏繞在它們周圍。甚至有一些奇怪的場合,文本不是鏈接的一部分,而是沒有間隔地插入。

Article ID和Article Key永遠不會相同。文章密鑰始終以數字結尾。如果這是可能的,我確定可以使用幫助。謝謝

Here are a few examples. 
http://www.example.com/ArticleDetails.aspx?ArticleID=3D10045411&AidKey=3D-2086622941 

http://example.com/ArticleDetails.aspx?ArticleID=10919199&AidKey=1956996566  

<a href="http://www.example.com/ArticleDetails.aspx?ArticleID=10773616&amp;AidKey=1998267392">http://www.example.com/ArticleDetails.aspx?ArticleID=10773616&amp;AidKey=1998267392</a> 

<a href="http://www.example.com/ArticleDetails.aspx?ArticleID=10773616&amp;AidKey=1998267392">This is a link description</a> 

http://example.com/ArticleDetails.aspx?ArticleID=10975137&AidKey=701321736this is not part of the url. 

最後我只是在尋找網址。

http://example.com/ArticleDetails.aspx?ArticleID=10975137&AidKey=701321736 

回答

0

對我來說這正則表達式的工作:

/http:\/\/(www\.)?example\.com\/ArticleDetails.aspx\?ArticleID=(.*?)(\&|\&amp;)AidKey=([\d\w-]*)/g 

更新: 我在正則表達式的末尾添加一個\d

/http:\/\/(www\.)?example\.com\/ArticleDetails.aspx\?ArticleID=(.*?)(\&|\&amp;)AidKey=([\d\w-]*)\d/g 

在PHP中使用它,你需要/.../msi

PHP例子在行動:http://ideone.com/N0TKM

+0

我沒有任何運氣。但是,當我將/ g更改爲/ im(/ http:\/\ /(www \。)?example \ .com \ /ArticleDetails.aspx \?ArticleID =(。*?)(\&| \ &) AidKey =([\ d \ w - ] *)/ im) – Tim

+0

不是我知道REGEX,但它是否有效。我很開心。謝謝T – Tim

+0

@Tim:我用php例子更新了我的答案。 – scube

1

DO NOT USE A REGEX!使用XML解析器...

$dom = DOMDocument::loadHTMLFile($pathToFile); 
$finder = new DOMXpath($dom); 
$anchors = $finder->query('//a[@href]'); 

foreach($anchors as $anchor){ 
    $href = $anchor->getAttribute('href'); 
    if(preg_match($regexToMatchUrls, $href)){ 
    //do stuff 
    } 
} 

所以$regexToMatchUrls將是一個正則表達式僅僅指剛,以配合您正在尋找......沒有任何這是更簡單的HTML的網址 - 那麼當比賽發生時你可以採取行動。

+1

我會檢查出來。順便也找到純文本鏈接沒有HREF纏繞它? – Tim

+0

不,這不是..這隻適用於錨標籤。如果你不需要分析錨,那麼你可以/應該使用正則表達式。我以爲你只需要一個''類型的上下文中的url,然後設置一個給定的模式...我的錯誤:-) – prodigitalson

+0

只需要注意,你也可以通過搜索包含錨文本的文本節點來做到這一點,但是,這可能比只使用正則表達式更麻煩...所以底線,如果oyu需要搜索HTML/XML給出實際上下文的東西,然後使用XML解析器......如果你只是搜索特定的測試字符串整個文檔模式,然後使用正則表達式。 – prodigitalson