我有一个用于匹配 URL 的正则表达式。它不应与以下内容匹配。
- www.yammercom
- http://www.yammer
- www.yammer..com
正则表达式
/^((((ht|f)tps?:\/\/)*(www\.)?|((ht|f)tps?:\/\/)(www\.)?)*)[a-z0-9-\.]+\.[a-z]{2,4}\/?([^\s<>\#%"\,\{\}\\|\\\^\[\]`]+)?$/
我在正则表达式中犯了什么错误?
试试看
我有一个用于匹配 URL 的正则表达式。它不应与以下内容匹配。
正则表达式
/^((((ht|f)tps?:\/\/)*(www\.)?|((ht|f)tps?:\/\/)(www\.)?)*)[a-z0-9-\.]+\.[a-z]{2,4}\/?([^\s<>\#%"\,\{\}\\|\\\^\[\]`]+)?$/
我在正则表达式中犯了什么错误?
试试看
如果你需要一个正则表达式来匹配一个 url,你可以看看这里:
http://mathiasbynens.be/demo/url-regex
你会发现大多数只会通过一半测试的非常长的正则表达式。这应该告诉您为什么尝试在 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 中一样。
无论如何,匹配 url 是很常见的。我的版本不好也不防弹。这只是为了演示。如果您需要更可靠的 RE,请查看此http://net.tutsplus.com/tutorials/other/8-regular-expressions-you-should-know/。
《掌握正则表达式》一书是另一本权威指南
我认为这会起作用:
/^((((ht|f)tps?:\/\/)*(www\.)?|((ht|f)tps?:\/\/)(www\.)?)*)[a-z0-9\-\.]+\.[a-z]{2,4}\/?([^\s<>\#%"\,\{\}\\|\\\^\[\]`]+)?$/
你必须逃避-