使用正则表达式获取部分IP和端口号
本文关键字:口号 IP 正则表达式 获取部 | 更新日期: 2023-09-27 18:02:55
我试图在c# Visual Studio 2013中使用正则表达式,我需要得到一个看起来像192.168.1.254:65的字符串。我需要做的是将这个字符串分解为两个值,一个IP地址和一个端口号,冒号左边的所有内容都将是IP地址,冒号右边的所有内容都将是端口,我需要在c#代码中使用正则表达式来完成此操作。因此,请在代码中添加任何名称空间,以便在c#中使用正则表达式,示例如下
string mystring = "192.168.1.254:65";
string myipaddress = RegularExpressionMethod(ExpressionToGetIp, mystring);
string myportnumber = RegularExpressionMethod(ExpressionToGetPort, mystring);
这与IPEndPoints无关它是一个通用的抽象方法
使用.Split()
方法:
string mystring = "192.168.1.254:65";
string[] s = mystring.Split(':');
string ip = s[0]; // "192.168.1.254"
string port = s[1]; // "65"
如果需要仔细检查IP和端口号格式是否正确,可以添加System.Net;
命名空间,然后解析每个字符串:
try
{
IPAddress IP = IPAddress.Parse(ip);
int PortNum = Int32.Parse(port);
}
catch
{
// catch any exceptions here
}
或者更简单的方法可能是(由EZI提醒我)使用.TryParse()
方法。这比较容易处理,因为它输出一个bool
。
IPAddress IP;
int PortNum;
if (IPAddress.TryParse(s[0], out IP)) // If it is a valid IP
{ MessageBox.Show("IP address in correct format"); }
else { MessageBox.Show("IP address not in correct format"); }
if (Int32.TryParse(s[1], out PortNum)) // If it is a valid Port Number
{ MessageBox.Show("Port Number in correct format"); }
else { MessageBox.Show("Port Number not in correct format"); }
你不可能重新发明轮子,说这样的话:
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() ;