c# - 正则表达式与预期的字符串不匹配

标签 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

最佳答案

您所缺少的只是顶级域上的可选 (?)。

^((([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

非常强烈建议您使用内置的 Uri不过 .NET 中的类,因为它会为您处理所有这些解析和验证(比任何正则表达式都更好)。它被设计为多功能的,如果你处理任何类型的 URI(正如你所看到的那样),几乎没有什么你不能用它做的,而且我很确定它会比 Regex 更快,也是。

关于c# - 正则表达式与预期的字符串不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19552034/

相关文章:

c++ - 在 Qt 中从字符串中提取参数,包括引用区域

php - str_replace 只替换特定事件?

javascript - 似乎无法 trim 所有前导空格 - JavaScript 或 jQuery

C# RegEx : Ignore case. .. 模式?

c# - 作为属性和索引器的数组

c# - 将 PDF 文件从 Fiddler 上传到 WebAPI 方法导致 415 Unsupported Media Type

C# 线程多次调用但运行一次

javascript - 正则表达式查找字符串中的 URL

c# - 我无法使用 Type.GetType 方法获取类型?

c# - WPF TextBlock 绑定(bind)到字符串