2010-07-29 110 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