正则表达式有点验证值是否具有以下特征之一:
123-29-123-123.subdomain.zomg.com:8085
123.12.34.56:420
不幸的是,我在Regex,C#,google搜索以及专有名词和常规名词之间的差异方面很糟糕。
它可能是一个失败的近似值,事实上我会选择任何一个:冒号分隔符,后面有一个端口。
答案 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