使用RegularExpression获取IP和端口号的部分

时间:2015-07-14 23:57:04

标签: c# regex

我想在C#Visual Studio 2013中使用正则表达式,我需要得到一个类似于192.168.1.254:65的字符串。 我需要做的是将此字符串分为两个值:IP地址和端口号,冒号左边的所有内容都是IP地址,冒号右边的所有内容都是端口,I需要在C#代码中使用正则表达式执行此操作。因此,请将需要添加到代码中的任何名称空间放在C#中使用正则表达式,如下所示

string mystring = "192.168.1.254:65";

string myipaddress = RegularExpressionMethod(ExpressionToGetIp, mystring);
string myportnumber = RegularExpressionMethod(ExpressionToGetPort, mystring);

这与IPEndPoints无关,它是一种通用的抽象方法

1 个答案:

答案 0 :(得分:3)

你无法重新发明轮子并说出这样的话:

string myString = "192.168.1.254:65";

UriBuilder uri  = new UriBuilder("http://" + myString );
string     host = uri.Host ;
int        port = uri.Port ;

你可以简单地说:

string[] parts = myString.Split(":");
string host = parts[0] ;
string port = parts[1] ;

但是你应该知道,如果你获得IPv6地址文字,这将会中断。

您可以使用正则表达式:

Regex rx = new Regex( @"^(?<host>.+):(?<port>\d+)$");
Match m  = rx.Match(myString);

if ( !m.Success ) throw new FormatException() ;

string host =            m.Groups["host"].Value   ;
int    port = int.Parse( m.Groups["port"].Value ) ;

或者你可以得到所有类似的想法并编写扩展方法:

static class ExtensionMethods
{
  public static DnsEndPoint ToDnsEndpoint( this string text)
  {
    Match m = rxDnsEndpoint.Match(text);
    if ( !m.Success ) throw new FormatException("invalid endpoint format");

    string        host     =            m.Groups["host"].Value   ;
    int           port     = int.Parse( m.Groups["port"].Value ) ;
    IPAddress     address  ;
    bool          parsed   = IPAddress.TryParse( host , out address ) ;
    AddressFamily family   = parsed ? address.AddressFamily : AddressFamily.Unspecified ;
    DnsEndPoint   endpoint = new DnsEndPoint( host , port , family ) ;
    return endpoint;
  }
  private static Regex rxDnsEndpoint = new Regex( @"^(?<host>.+):(?<port>\d+)$");
}

让你说出像

这样的话
DnsEndpoint endpoint = myString.ToDnsEndpoint() ;