0

我有一个用于匹配 URL 的正则表达式。它不应与以下内容匹配。

  1. www.yammercom
  2. http://www.yammer
  3. www.yammer..com

正则表达式

/^((((ht|f)tps?:\/\/)*(www\.)?|((ht|f)tps?:\/\/)(www\.)?)*)[a-z0-9-\.]+\.[a-z]{2,4}\/?([^\s<>\#%"\,\{\}\\|\\\^\[\]`]+)?$/

我在正则表达式中犯了什么错误?

试试看

红色演示

4

3 回答 3

1

如果你需要一个正则表达式来匹配一个 url,你可以看看这里:

http://mathiasbynens.be/demo/url-regex

你会发现大多数只会通过一半测试的非常长的正则表达式。这应该告诉您为什么尝试在 1 行正则表达式中验证它不是一个好主意。

于 2013-10-16T07:29:23.683 回答
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/

《掌握正则表达式》一书是另一本权威指南

于 2013-10-16T07:57:28.297 回答
0

我认为这会起作用:

/^((((ht|f)tps?:\/\/)*(www\.)?|((ht|f)tps?:\/\/)(www\.)?)*)[a-z0-9\-\.]+\.[a-z]{2,4}\/?([^\s<>\#%"\,\{\}\\|\\\^\[\]`]+)?$/

你必须逃避-

于 2013-10-16T07:51:11.277 回答