C# 正则表达式问题:有效URL不匹配,但应

C# 正则表达式问题:有效URL不匹配,但应,c#,regex,C#,Regex,早些时候我发布了一个类似的问题,但现在我意识到我应该更彻底 我已经测试了regexlib.com上列出的许多URL/URI表达式,但我无法让它们中的任何一个按预期工作: msn.com msn-msn.net yahoo.c!om http://www.yahoo.com msn msn test ! number 1 [a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)? 以下是我希望他们采取行动的方式: msn.com (match) msn-msn.net (ma

早些时候我发布了一个类似的问题,但现在我意识到我应该更彻底

我已经测试了regexlib.com上列出的许多URL/URI表达式,但我无法让它们中的任何一个按预期工作:

msn.com
msn-msn.net
yahoo.c!om
http://www.yahoo.com
msn msn
test ! number 1
[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?
以下是我希望他们采取行动的方式:

msn.com (match)
msn-msn.net (match)
yahoo.c!om (fail)
http://www.yahoo.com (match)
msn msn (fail)
test ! number 1 (fail)
我在这里使用测试仪:在我自己的应用程序(C#,.NET4.0)中测试之前

最接近的表达式如下,但与以下表达式不匹配:

感谢您的帮助。此外,应该有人想出一个更具可读性的等价物来代替RegEx…这是一场噩梦

谢谢,
Beems

如果您不能保证您尝试匹配的URL模式具有方案/协议,那么最安全的做法是匹配:


从您的帖子中,显然不需要进入URL的路径、散列或查询部分,仅此而已

这一个似乎可以按需要工作:

msn.com
msn-msn.net
yahoo.c!om
http://www.yahoo.com
msn msn
test ! number 1
[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?
在我最初的查询中,有人能看到这方面的任何问题吗?我不需要验证TLD是否正确,因此这不是一个真正的问题。

同意kojiro的观点

但这确实符合你的测试


关于
https://fribjatz.pr/index.php?p=omghash&filthypizza#toystory2
ftp://milkdud.localdomain/pub/funkytoaster/
?@kojiro。这两种方法都使用以下命令(“[a-zA-Z0-9\-\.]+.[a-zA-Z]{2,3}(/\S*)?”)通过,这很好。除了正则表达式之外,我还在做额外的解析和测试来处理不同的场景。(如果是FTP,那么就做X等等)你是对的,我真的不关心路径。另外,我不需要验证TLD是否正确,所以这也不是问题。但是你没有解析文本,有人可以在其中键入域?例如:www.yahoo.com.在下一句话中,可能会忘记第一个空格?根据Ruby RegEx tester链接,所有这些都不会通过。我不知道那到底是什么意思。