修改正则表达式以匹配主机名和端口号

本文关键字:口号 主机 正则表达式 修改 | 更新日期: 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 轻松测试这些东西,这是我更喜欢的工具。