2010-07-29 104 views
0

我想寫一個正則表達式來抓取任何.gov或.edu網址的整個網址,使其成爲一個鏈接。正則表達式只匹配.gov tlds

我目前有:

/(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/

所有()這樣我就可以吐出它任何URL,但我只想.GOV或.edu的人。

在此先感謝。

回答

1

[-A-Z0-9+&@#\/%?=~_|!:,.;]*似乎是誹謗大部分的網址,所以我們需要在這裏堵塞.gov和.edu的地方。最快的解決辦法是:

[-A-Z0-9+&@#\/%?=~_|!:,.;]+(\.gov|\.edu)[-A-Z0-9+&@#\/%?=~_|!:,.;]*

然而,這會匹配一個網址:http://www.example.com/evil.gov/test.html

爲了解決這個問題,我們可以拿出它的頂級域名之前匹配/

[-A-Z0-9+&@#%?=~_|!:,.;]+(\.gov|\.edu)[-A-Z0-9+&@#\/%?=~_|!:,.;]*

或者,在最後,我們有:

/(\b(https?|ftp):\/\/[-A-Z0-9+&@#%?=~_|!:,.;]+(\.gov|\.edu)[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|]?)/

由於它與example.gov不匹配的問題,我在最後一個標記中添加了一個?

該死的是醜陋的。

+0

注 - 許多這些符號在域名中是非法的。刪除它們會使它顯得不那麼難看。 – zigdon 2010-07-29 20:50:59

+0

同意的zigdon。想與他的原始正則表達式一起工作。 – 2010-07-29 21:12:25

+0

雖然它匹配'http:// FOO.edu-BAR.X'。 – user123444555621 2010-07-29 21:12:27