C#正则表达式验证“真实的”IP值

时间:2010-04-05 20:10:48

标签: c# .net regex

正则表达式有点验证值是否具有以下特征之一:

123-29-123-123.subdomain.zomg.com:8085
123.12.34.56:420

不幸的是,我在Regex,C#,google搜索以及专有名词和常规名词之间的差异方面很糟糕。

它可能是一个失败的近似值,事实上我会选择任何一个:冒号分隔符,后面有一个端口。

3 个答案:

答案 0 :(得分:2)

这会有用吗?

^(?<Host>[^:]+)(?::(?<Port>\d+))?$

这给了我:

Host = 123-29-123-123.subdomain.zomg.com
Port = 8085

Host = 123.12.34.56:420
Port = 420

答案 1 :(得分:0)

嗯,最简单的正则表达式可能是:

(\d{1,3}\.\d{1,3}\.\d{1,3})(:\d+)?

但是 ...这样可以使999.999.999之类的内容不是有效(格式有效,但是不是值)IP地址。

如果要验证每个块,最好在正则表达式之外执行此操作。

答案 2 :(得分:0)

可以使用我称之为匹配无效者(?!)来否定匹配(如果后缀缺席则匹配)。 (我写了一篇博客文章:Regular Expression (Regex) Match Invalidator (?!) in .Net就此而已)

In(?! Suffix )如果后缀匹配,则匹配失败。我已经考虑了使用(?!)256-999和000的可能性。这是模式,使用IgnorePatternWhiteSpace,因为我已经评论了模式:

string pattern = @"
^(                      # Anchor to the beginning of the line
                        # Invalidations
  (?!25[6-9])              # If 256, 257...259 are found STOP
  (?!2[6-9]\d)             # If 260-299 stop
  (?![3-9]\d\d)            # if 300-999 stop
  (?!000)                  # No zeros
  (\d{1,3})             # Between 1-3 numbers
  (?:[.-]?)             # Match but don't capture a . or -
 ){4,6}                 # IPV4 IPV6
(?<Url>[A-Za-z.\d]*?)   # Subdomain is mostly text
(?::)
(?<Port>\d+)";

HTH