URL的正则表达式

URL的正则表达式

问题描述:

下面发布的正则表达式用于拾取URL,包括格式为example.com等格式的URL。不过,我希望它只能在前面有www.httphttps等的网址中找到。换句话说,它应该拿起www.example.com。它不应该拿起example.comURL的正则表达式

((((ht|f)tp(s?))\://)?((www.|[a-zA-Z])([a-zA-Z0-9\-]+\.)([a-zA-Z]{2,8}))(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\;\?\'\\\+&%\$#\=~_\-]+))*) 
+0

那么它工作还是什么? – danben 2010-01-20 16:00:33

+0

您确定只想匹配美国域名吗?其他国家在TLD部分有一个额外的网址:www.bbc.co.uk或www.tmnet.com.my。 – slebetman 2010-01-20 16:17:10

+0

此表达式已适用于提取包含子域名的网址。这是行不通的,因为我希望它只拾取以www开头的URL。或http: 菲利普G已经解决了这个问题,所以他更新的表达是最适合我的。 – Mike 2010-01-20 16:24:58

嗯尝试

(((((ht|f)tp(s?))\://)|(www\.))((|[a-zA-Z])([a-zA-Z0-9-]+.)([a-zA-Z]{2,8}))(\:[0-9]+)*(/($|[a-zA-Z0-9.\,\;\?\'\+&%\$#\=~_-]+))*)

编辑: 是的,我并没有真正测试之一。好吧,我也没有测试这种之一,但我看着它真的很用心;)

(((((ht|f)tp(s?))\://)|(www\.))(([a-zA-Z0-9-]+.)?([a-zA-Z0-9]+\.)([a-zA-Z]{2,8}))(\:[0-9]+)*(/($|[a-zA-Z0-9.\,\;\?\'\+&%\$#\=~_-]+))*)

你应该看看一个良好的正则表达式测试仪。我通常使用Expresso,但有很多其他的。

+0

这一个似乎随机切断。例如,尝试http://www.yahoo.com时,会切断.com。对于使用http://的其他实例也会发生这种情况,因此它并不总是在.com处。 – Mike 2010-01-20 16:36:18

+0

@Mike:新的表达,试试吧。 – FrustratedWithFormsDesigner 2010-01-20 16:51:58

+0

谢谢!它工作得更好。我会做更彻底的测试,但以前的所有问题似乎都已解决。 – Mike 2010-01-20 18:31:53

我修改你的表达:

((((ht|f)tp(s?))\://)?((www\.)([a-zA-Z0-9-]+\.)([a-zA-Z]{2,8}))(\:[0-9]+)*(/($|[a-zA-Z0-9.\,\;\?\'\+&%\$#\=~_-]+))*) 

一个不错的网站,在这里检查您的表达式:http://gskinner.com/RegExr/

+0

这工作正是我想要的方式。非常感谢! – Mike 2010-01-20 16:25:27

+0

对不起。没有经过彻底的测试,我的回答太快了。它确实检查www。等等。但是,它不再选择带有子域的URL。 – Mike 2010-01-20 16:33:34

验证该URI与正则表达式合式 - 使用一个出来的RFC验证它与代码是否合理。试图将格式正确和合理的检查合并为一个正则表达式太难以正确使用。请参阅:Need a regex to validating a Url...

+0

好点,在验证输入完成后很可能更容易拒绝特殊情况。 – FrustratedWithFormsDesigner 2010-01-20 16:15:17

+0

我会给它一个镜头。 – Mike 2010-01-20 16:36:49

在这里你去:

\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.])(?:[^\s()<>]+|\([^\s()<>]+\))+(?:\([^\s()<>]+\)|[^`!()\[\]{};:'".,<>?«»“”‘’\s])) 

这是修改后的自由URL来自Daring Fireball的正则表达式。

+0

感谢您的帮助。这个表达式包含一个问题,它可以提取www之前的所有内容。或http: 例如: asfjkljswww.yahoo。com 正则表达式会在这行中包含asfj-etc等所有内容。我将在下面发表的文章似乎是迄今为止最有希望的: (((((ht | f)tp(s?))\://()|(www \。))(([a-zA -Z0-9 - ] +)([A-ZA-Z0-9] + \)([A-ZA-Z] {2,8}))(\:[0-9] +)*。?。 (/($|[a-zA-Z0-9.\,\;\?\'\+&%\$#\=~_-]+)*) 对于这个表达式,Credit转到FrustratedWithFormsDesigner。 – Mike 2010-01-21 17:00:37

+0

@Mike:我提供的正则表达式与'asfjkljswww.yahoo.com'不匹配,请再次检查。 – 2010-01-21 17:13:22

+0

你是对的。当我复制它时,我一定犯了一个错误。这工作得很好。感谢您的帮助! – Mike 2010-01-26 16:00:47