2010-02-05 17 views
1

我有一個像博客數據:我想過濾出我的博客文章中的foregin鏈接,有人能幫我正則表達式嗎?

This is foreign <a href="xyz.com">link</a>, this is my site's <a href="mysite.com">link</a> and so on. 

我想是做的是過濾國外網站的鏈接,即「<a href="xyz.com">link</a>」。所以我的最終輸出是:

This is foreign link, this is my site's <a href="mysite.com">link</a> and so on. 

我試過「preg_replace」,但沒有任何模式的幫助。

+3

我建議你閱讀這個答案:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – 2010-02-05 18:21:43

+0

感謝分享這個,你能建議任何其他方式來做到這一點? – 2010-02-05 18:49:20

回答

1

這不應該用正則表達式來完成。

嘗試像DOM解析器一樣。

如果你使用PHP,但是這一個非常好用的,我不知道:
http://simplehtmldom.sourceforge.net/

希望這有助於。

+0

感謝分享。這解決了我的問題 – 2010-02-05 21:19:28

+0

@Chetan sharma,那麼你應該將此標記爲「接受」的答案:) – 2010-04-02 03:29:21

+0

哦,對不起,謝謝你的告訴。 – 2010-04-03 10:31:42

1

您可以使用DOMDocument來查找所有鏈接元素,只需更新源代碼即可。我寫了一個如何use DOMDocument to find all links的小例子。我使用這種方法來重寫我工作過的一些項目中的鏈接。我敢肯定,如果網址與您的主機不匹配,則不需要花費太多精力去刪除標籤並將其替換爲文本。

2

首先,我必須同意那些已經說過正則表達式不適合HTML的人。

這就是說,如果你想要做的是沒有比

foo 

更換的

<a href="something.tld">foo</a> 

任何和所有出現的更復雜,如果something.tld是不是你的域名,那麼這應該做的竅門

preg_replace('/<a href="http:\/\/(?!mysite.com)(.*?)>(.*?)<\/a>/', 
       '$2', 
       $mystring); 

其中$ mystring顯然是你想修改的字符串。然而,這使用正則表達式lookarounds,這是一個非常好的贈品,這不是用正則表達式來完成的。

HTH

相關問題