RegEx问题:有效的URL不匹配,但应该

时间:2011-03-01 22:38:39

标签: c# regex

我之前发过一个类似的问题,但我现在意识到我应该更加彻底。

我已经测试了regexlib.com上列出的一些URL / URI表达式,但是我不能让它们中的任何一个按照需要运行:

msn.com
msn-msn.net
yahoo.c!om
http://www.yahoo.com
msn msn
test ! number 1

以下是我希望他们采取行动的方式:

msn.com (match)
msn-msn.net (match)
yahoo.c!om (fail)
http://www.yahoo.com (match)
msn msn (fail)
test ! number 1 (fail)

我在这里使用测试器:http://regexlib.com/RETester.aspx然后在我自己的应用程序(C#,.NET 4.0)中进行测试

最接近的表达式是这个,但它与http://www.yahoo.com表达式不匹配:

^[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~])*

感谢任何帮助。另外,有人应该提出一个更像人类可读的RegEx ...这个东西是一个噩梦。

谢谢, Beems

3 个答案:

答案 0 :(得分:0)

如果你不能保证你想要匹配的URL-esque模式有一个方案/协议,那么最安全的做法是匹配top-level domains

^(https?://)[^/]*.([possibly|really|long|list|of|valid|top|level|domains][2])

从你的帖子中显然没有必要进入URL的路径,哈希或查询部分,所以就是这样!

答案 1 :(得分:0)

这个似乎按预期工作:

[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?

任何人都可以看到有关我的原始查询的任何问题吗?我不需要验证TLD是否合适,所以这不是一个真正的问题。

答案 2 :(得分:0)

同意kojiro

但这确实符合您的测试

http://www.rubular.com/r/gUb4U6Pzux