我有一个正则表达式来匹配网址。它不应该与以下内容相匹配。
正则表达式
/^((((ht|f)tps?:\/\/)*(www\.)?|((ht|f)tps?:\/\/)(www\.)?)*)[a-z0-9-\.]+\.[a-z]{2,4}\/?([^\s<>\#%"\,\{\}\\|\\\^\[\]`]+)?$/
我在正则表达式中犯了什么错误?
试一试
答案 0 :(得分:1)
如果你需要一个正则表达式来匹配一个网址,你可以看看这里:
http://mathiasbynens.be/demo/url-regex
你会发现疯狂的长正则表达式,大多数只能通过测试的一半。这应该告诉你为什么尝试在一行正则表达式中验证它不是一个好主意。
答案 1 :(得分:1)
自由间隔你的RE之后,事实证明存在一些问题......
您不需要使用*
匹配协议,而最后[]
对我来说没有多大意义......(也许您可以更新您的问题。)
我的调整就在这里。见在线演示。 http://rubular.com/r/12J7ZRo4Qx
/^(
(https?|ftp)
:\/\/ #protocol
)? #is optional
(www\.)? #optional www
[-a-z0-9]+ #place - first so it means literally
\.
[a-z]{2,4} #trailing hostname
( #match pathname
\/ #a slash is required
[-a-z0-9]+ #same as hostname
)*
/x
x
标志代表自由间距,如perl。
无论如何,匹配网址很常见。我的版本不好,也没有防弹。这只是为了演示。 如果您需要更多实体RE,请查看此http://net.tutsplus.com/tutorials/other/8-regular-expressions-you-should-know/。
掌握正则表达式这本书是另一个权威指南
答案 2 :(得分:0)
我认为这会奏效:
/^((((ht|f)tps?:\/\/)*(www\.)?|((ht|f)tps?:\/\/)(www\.)?)*)[a-z0-9\-\.]+\.[a-z]{2,4}\/?([^\s<>\#%"\,\{\}\\|\\\^\[\]`]+)?$/
你必须看看-