修改RegEx以匹配主机名和端口号?

时间:2013-10-25 21:53:43

标签: c# regex

我找到了这个正则表达式:

^(?=.{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

如何修改此表达式以执行我需要的操作?

3 个答案:

答案 0 :(得分:1)

请勿使用正则表达式,请使用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);

答案 1 :(得分:1)

这是我为C#应用程序提出的RegEx:

@"^(?<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+))$"

答案 2 :(得分:0)

您可以简单地将结尾从$更改为(?:: [\ d] +)?$您可以使用在线注册表匹配器或QuickREx轻松测试此类内容,这是我喜欢的工具。< / p>