如何将此正则表达式更改为仅匹配网址?

时间:2017-11-28 14:15:24

标签: regex

我想检查包含网址的字符串的匹配项,例如:

http://www.something.com

www.something.com

something.com

我有这个正则表达式(.Net样式)来匹配网址:

((http|ftp|https|www)://)?(\w+?\.\w+)+([a-zA-Z0-9\~\!\@\#\$\%\^\&\*\(\)_\-\=\+\\\/\?\.\:\;\'\,]*)?

它适用于3个以上的网址,但不幸的是它也符合这个:

35.000

如何修复正则表达式,使其不匹配35.000?

1 个答案:

答案 0 :(得分:0)

这是一个非常方便的正则表达式,它匹配URL并将协议,主机,路径,查询和片段分别放入组1,2,3,4和5中。它还匹配主机部分中的IP地址和主机名。除了主持人之外的所有东西都是可选的。

(?:(https?|ftp)://)?(\d{1,3}(?:\.\d{1,3}){3}|(?:\w+\.)*[a-z]+)(/[^?#\s]*)(\?[^#\s]*)?(#[^\s]*)?

正如您所看到的,它是非常宽松。它只是检查整体结构而不实际验证URL的部分(编码等)。但它会匹配任何正确的URL,所以它应该足够好。如果使用Javascript,只需转义/斜杠,它应该可以正常工作。

试试here