0

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

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

2 回答 2

0

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

@"^([^:]+)(?:[:](\d{0,5}))?$"

其中 ^ 和 $ 将模式锚定到字符串的开头和结尾。如果在 Regex.Match() 中使用此模式,则可以在 match.Groups[1].Value 中找到主机名,在 match.Groups[2].Value 中找到端口号,以检查它是否不超过 65535。

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

于 2012-11-16T11:50:29.607 回答
0

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

获取主机/IP 使用match.Group["host"]并获取端口使用match.Group["posrt"]

于 2012-11-16T12:03:20.810 回答