【发布时间】:2017-11-28 14:15:24
【问题描述】:
我想检查包含 url 的字符串是否匹配,例如:
http://www.something.com
www.something.com
something.com
我有这个正则表达式(.Net 风格)来匹配 url:
((http|ftp|https|www)://)?(\w+?\.\w+)+([a-zA-Z0-9\~\!\@\#\$\%\^\&\*\(\)_\-\=\+\\\/\?\.\:\;\'\,]*)?
它应该适用于以上 3 个 url,但不幸的是它也匹配这个:
35.000
如何修复正则表达式,使其不匹配 35.000?
【问题讨论】:
-
只过滤掉不包含字母的匹配项,如果您在.NET中提取文本应该很容易。
-
作为旁注,您可以将
(http|ftp|https|www)更改为(https?|ftp|www),并且您的长列表不需要转义每个字母,您可以使用\w而不是a-zA-Z0-9_,从而使用@987654328而是@。 -
url 语法非常复杂。尝试使用单一模式完成所有工作并不是一个好主意,原因有两个:1)如果您编写处理所有可能情况的最终模式,它将不可读且速度慢。 2)如果你写一个简单的模式,你会错过url,你会匹配不是url的子字符串。结论,选择一个折中方案:一个简单的、非常宽松的模式 + 一个内置的 url 检查器来过滤结果。
-
顺便说一句,模式中的
www分支永远不会匹配www.brinch.org,但会匹配www://brinch.org
标签: regex