我想在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无关,它是一种通用的抽象方法
答案 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() ;