修改正则表达式以匹配主机名和端口号
本文关键字:口号 主机 正则表达式 修改 | 更新日期: 2023-09-27 18:37:03
我发现了这个正则表达式:
^(?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?(?:'.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*'.?$
它应该匹配任何主机名,但是我需要它还匹配冒号,后跟末尾的端口号,如下所示:
host.name.com:8888
如何修改此表达式以执行所需的操作?
不要使用正则表达式,请使用TcpClient
static bool checkHost(string host,int timeout)
{
if (!host.Contains(':'))
return false;
try
{
string[] h = host.Split(':');
Task e = new TcpClient().ConnectAsync(h[0], int.Parse(h[1]));
new Task(e.Start);
Thread.Sleep(timeout);
return e.IsCompleted;
}
catch (SocketException){ }
catch (ArgumentOutOfRangeException) { }
return false;
}
例
bool check = checkHost("google.com:80",1000);
这是我
为我的 C# 应用程序想出的正则表达式:
@"^(?<hostname>((?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?(?:'.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*'.?)|localhost)(?::(?<port>'d+))$"
您可以简单地将结尾从 $ 更改为 (?::[''d]+)?$ 您可以使用在线注册 exp 匹配器或 QuickREx 轻松测试这些东西,这是我更喜欢的工具。