正则表达式只匹配.gov tlds

时间:2010-07-29 20:35:56

标签: regex url

我正在尝试编写一个正则表达式来获取任何.gov或.edu网址的完整网址,以使其成为一个链接。

我目前有:

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

全部在()所以我可以为任何网址反刍,但我只想要.gov或.edu。

提前致谢。

1 个答案:

答案 0 :(得分: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不匹配,我在最后一个标记中添加了?

该死的很丑。