正则表达式不符合预期的字符串

时间:2013-10-23 20:52:04

标签: c# regex

我有这个正则表达式:

^((([hH][tT][tT][pP][sS]?|[fF][tT][pP])\:\/\/)?([\w\.\-]+(\:[\w\.\&%\$\-]+)*@)?((([^\s\(\)\<\>\\\""\.\[\]\,@;:]+)(\.[^\s\(\)\<\>\\\""\.\[\]\,@;:]+)*(\.[a-zA-Z]{2,4}))|((([01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}([01]?\d{1,2}|2[0-4]\d|25[0-5])))(\b\:(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{0,3}|0)\b)?((\/[^\/][\w\.\,\?\'\\\/\+&%\$#\=~_\-@]*)*[^\.\,\?\""\'\(\)\[\]!;<>{}\s\x7F-\xFF])?)$

它在很大程度上起作用,但它与localhost:8888不匹配。

如何修改此表达式以匹配localhost:8888

1 个答案:

答案 0 :(得分:2)

您遗失的只是顶级域名中的可选(?)。

^((([hH][tT][tT][pP][sS]?|[fF][tT][pP])\:\/\/)?([\w\.\-]+(\:[\w\.\&%\$\-]+)*@)?((([^\s\(\)\<\>\\\""\.\[\]\,@;:]+)(\.[^\s\(\)\<\>\\\""\.\[\]\,@;:]+)*(\.[a-zA-Z]{2,4})?)|((([01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}([01]?\d{1,2}|2[0-4]\d|25[0-5])))(\b\:(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{0,3}|0)\b)?((\/[^\/][\w\.\,\?\'\\\/\+&%\$#\=~_\-@]*)*[^\.\,\?\""\'\(\)\[\]!;<>{}\s\x7F-\xFF])?)$

匹配一些示例,包括您想要的示例:

http://www.rexfiddle.net/6tWa1Wl

非常强烈建议您在.NET中使用内置的Uri类,因为它会为您处理所有这些解析和验证(比任何正则表达式更好)可以)。它被设计成多功能的,如果你处理任何类型的URI(就像它看起来那样),你几乎无法用它做,而且我很确定它会比Regex更快,太