C# 验证smtpHost:端口字符串

C# 验证smtpHost:端口字符串,c#,regex,C#,Regex,我很难编写正则表达式来验证和分组以下内容: c1dev01-->有效 c1dev01:25-->有效 192.168.2.3-->有效 192.168.2.3:189-->有效 c1dev01:-->有效 c1dev01:aa-->无效 我想正确范围的验证最好不要在正则表达式中完成,而是在单独的步骤中完成。但是,regex非常适合验证字符串格式并一次性提取端口号。对于这种格式,我们最多需要一个冒号,并且只需要在冒号右边的数字(最多5个)。这对应于以下模式字符串: @"^([^:]+)(?:[:

我很难编写正则表达式来验证和分组以下内容:

  • c1dev01-->有效
  • c1dev01:25-->有效
  • 192.168.2.3-->有效
  • 192.168.2.3:189-->有效
  • c1dev01:-->有效
  • c1dev01:aa-->无效

我想正确范围的验证最好不要在正则表达式中完成,而是在单独的步骤中完成。但是,regex非常适合验证字符串格式并一次性提取端口号。对于这种格式,我们最多需要一个冒号,并且只需要在冒号右边的数字(最多5个)。这对应于以下模式字符串:

@"^([^:]+)(?:[:](\d{0,5}))?$"
其中,^和$将模式锚定到字符串的开头和结尾。如果在Regex.Match()中使用此模式,则可以在Match.Groups[1].Value中找到主机名,并在Match.Groups[2].Value中找到端口号,以检查其不超过65535

当然,您可以进一步限制主机允许的字符。

^(?(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})|(\w+)(:(?\d{0,5}))*$


要获得主机/IP,请使用
match.Group[“host”]
和端口使用
match.Group[“posrt”]
(?\w+):(?\d$)这通常应包含在问题中,以显示您自己的努力,并且您没有要求我们为您完成工作。谢谢,但是组[0]返回完整的字符串…我只需要主机名。将主机也用括号括起来。然后组[1]将成为主机。我将编辑答案