Regex 使用通配符验证ip地址的正则表达式

Regex 使用通配符验证ip地址的正则表达式,regex,validation,Regex,Validation,我似乎无法获得正确的正则表达式来验证IP地址,包括对通配符(*)的支持,而通配符只能出现在最后。例如: 有效 1.2.* 1.2.3.* 1.2.3.4 1 1.2 1.2* 1.2.3 1.2.3* 1.*.3.4 无效 1.2.* 1.2.3.* 1.2.3.4 1 1.2 1.2* 1.2.3 1.2.3* 1.*.3.4 我已经接近了(并且在这里找到了一些类似的问题/答案),但无法让所有场景都通过/失败。有人能帮我吗?顺便说一句-验证八位字节是否为0-255是不必要的,但会很酷。

我似乎无法获得正确的正则表达式来验证IP地址,包括对通配符(*)的支持,而通配符只能出现在最后。例如:

有效

1.2.*
1.2.3.*
1.2.3.4
1
1.2
1.2*
1.2.3
1.2.3*
1.*.3.4
无效

1.2.*
1.2.3.*
1.2.3.4
1
1.2
1.2*
1.2.3
1.2.3*
1.*.3.4

我已经接近了(并且在这里找到了一些类似的问题/答案),但无法让所有场景都通过/失败。有人能帮我吗?顺便说一句-验证八位字节是否为0-255是不必要的,但会很酷。

最多匹配3个部分,然后匹配一个通配符或常规IP:

^((\d{1,3}\.){1,3}\*|(\d{1,3}\.){3}\d{1,3})$

或者,如果还想验证数字,请将
\d{1,3}
s更改为
(1?\d?\d|2[0-4]\d | 25[0-5])

匹配最多3个部分,然后是通配符或常规IP:

^((\d{1,3}\.){1,3}\*|(\d{1,3}\.){3}\d{1,3})$
或者,如果您还想验证这些数字,请将
\d{1,3}
s更改为
(1?\d?\d | 2[0-4]\d | 25[0-5])

类似的内容:

^((((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}\*)|(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){2}\*)|(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){1}\*))$
第二版:

^((((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){1,3}\*))$
大概是这样的:

^((((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}\*)|(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){2}\*)|(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){1}\*))$
第二版:

^((((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){1,3}\*))$
正则表达式:

如果要验证整个字符串是否为IP地址,请将
\b
替换为
^
(开始)和
$
(结束),否则它将在字符串中查找匹配项。

正则表达式:

\b((?:(?:\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.){3}(?\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])|(?\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.){0,3}\*))\b
^(?:(?:[0-1]\d\d|2[0-4]\d|25[0-5])|(?:\d{1,2}))(?:(?:(?:\.(?:(?:[0-1]\d\d|2[0-4]\d|25[0-5])|(?:\d{1,2})))){3}|(?:\.(?:(?:[0-1]\d\d|2[0-4]\d|25[0-5])|(?:\d{1,2}))){0,2}\.\*)$
如果要验证整个字符串是否为IP地址,请将
\b
替换为
^
(开始)和
$
(结束),否则它将在字符串中查找匹配项

^(?:(?:[0-1]\d\d|2[0-4]\d|25[0-5])|(?:\d{1,2}))(?:(?:(?:\.(?:(?:[0-1]\d\d|2[0-4]\d|25[0-5])|(?:\d{1,2})))){3}|(?:\.(?:(?:[0-1]\d\d|2[0-4]\d|25[0-5])|(?:\d{1,2}))){0,2}\.\*)$
下面是一个简短的ruby脚本,用于显示构造和验证结果:

#/usr/bin/env ruby
八位字节2=/(?:\d{1,2})/
八位元三=/(?:[0-1]\d\d|2[0-4]\d|25[0-5])/
八位元=/(?:#{octet3}|#{octet2})/
点八位组=/(?:\。{octet})/
尾随的{u-wild\u-ip=/^{octet}((?:{dot\u-octet}){3}{124;{dot\u-octet}{0,2}.\*)$/
%w{
1.2.*
1.2.3.*
1.2.3.4
1.
1.2
1.2*
1.2.3
1.2.3*
1.*.3.4
}.
map{| ip |[ip,ip.match(trailing_-wild_-ip)?'valid':'invalid']}。
每个{ip,match}放置“{ip}=>{match}”
#输出:
1.2.*=>有效
1.2.3.*=>有效
1.2.3.4=>有效
1=>无效
1.2=>无效
1.2*=>无效
1.2.3=>无效
1.2.3*=>无效
1.*.3.4=>无效
下面是一个简短的ruby脚本,用于显示构造和验证结果:

#/usr/bin/env ruby
八位字节2=/(?:\d{1,2})/
八位元三=/(?:[0-1]\d\d|2[0-4]\d|25[0-5])/
八位元=/(?:#{octet3}|#{octet2})/
点八位组=/(?:\。{octet})/
尾随的{u-wild\u-ip=/^{octet}((?:{dot\u-octet}){3}{124;{dot\u-octet}{0,2}.\*)$/
%w{
1.2.*
1.2.3.*
1.2.3.4
1.
1.2
1.2*
1.2.3
1.2.3*
1.*.3.4
}.
map{| ip |[ip,ip.match(trailing_-wild_-ip)?'valid':'invalid']}。
每个{ip,match}放置“{ip}=>{match}”
#输出:
1.2.*=>有效
1.2.3.*=>有效
1.2.3.4=>有效
1=>无效
1.2=>无效
1.2*=>无效
1.2.3=>无效
1.2.3*=>无效
1.*.3.4=>无效
又漂亮又短

^((\d+\.){3}\d+|(\d+\.){1,3}\*)$
使用正则表达式修饰符,使“^”和“$在行开始/结束处匹配

^((\d+\.){3}\d+|(\d+\.){1,3}\*)$
使用正则表达式修饰符,使“^”和“$在一行开始/结束处匹配

^\*|(?:25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2}\.(?:\*|(?:25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2}\.(?:\*|(?:25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2}\.(?:\*|(?:25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2})))))))$
细分:

^\*|                                           # Treat '*' by itself as valid or
(?:25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2}\.       # Basic octet pattern plus...
(?:\*|(?:25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2}\. # Wildcard, or 2nd octet plus...
(?:\*|(?:25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2}\. # Wildcard, or 3rd octet plus...
(?:\*|(?:25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2}   # Wildcard or last octet
)))))))$                                       # Close up shop
全部在一条线上:

^\*|(?:25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2}\.(?:\*|(?:25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2}\.(?:\*|(?:25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2}\.(?:\*|(?:25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2})))))))$
细分:

^\*|                                           # Treat '*' by itself as valid or
(?:25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2}\.       # Basic octet pattern plus...
(?:\*|(?:25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2}\. # Wildcard, or 2nd octet plus...
(?:\*|(?:25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2}\. # Wildcard, or 3rd octet plus...
(?:\*|(?:25[0-5]|2[0-4][0-9]|[01]?[0-9]{1,2}   # Wildcard or last octet
)))))))$                                       # Close up shop

你为什么不发布你最好的,也是最接近的尝试呢?还有那些通过或失败的
*
1.*
呢?为什么不发布你最好的,也是最接近的,尝试呢?还有那些通过或失败的
*
1.
呢?看起来不错,但不是每个部分都需要三位数字吗?(我想a{1,3}是被打斗了。)不,原来是你让它工作的。有趣的是,你开发了正则表达式,但后来认为你搞错了!在regexpal.com中,它至少起作用了。效果很好。非常感谢你。我把正则表达式的要求搞砸了。我忘了说“1.*”应该是无效的,并且至少要指定2个八位字节。不知道如何修改它来支持它。还有最后一点帮助吗?提前谢谢你,伙计。谢谢你<代码>^(((25[0-5][0-4][0-9][0-9][0-9]?){3}(25[0-5][0-4][0-9][01]?[0-9][0-9][0-9][0-9])|((25[0-5][0-4][0-9][0-9][0-9];[01]?){0-9]){2,3}*)看起来不错,但不需要三位数。?(我想a{1,3}是被打斗了。)不,原来是你让它工作的。有趣的是,你开发了正则表达式,但后来认为你搞错了!在regexpal.com中,它至少起作用了。效果很好。非常感谢你。我把正则表达式的要求搞砸了。我忘了说“1.*”应该是无效的,并且至少要指定2个八位字节。不知道如何修改它来支持它。还有最后一点帮助吗?提前谢谢你,伙计。谢谢你<代码>^(((25[0-5]| 2[0-4][0-9]|[01]?[0-9][0-9]?){3}(25[0-5]| 2[0-4][0-9]|[01]|[0-9][0-9]|)|((25[0-5]| 2[0-4][0-9]|[0-9]|[01]|美元?[0-9][0-9]| 0-9]){2,3}*)*))这看起来不错,但你需要在下一个代码组中添加锚,除了锚之外,其他所有东西都是一种方式“匹配字符串开头的通配符IP或字符串结尾的常规IP”。@F.J:Oops,你说得对。它经过了一些更改,我错过了:)谢谢。这看起来不错,但你需要将除锚以外的所有内容放入一个组中,或者在
旁边添加锚,否则这意味着”匹配字符串开头的通配符IP或字符串结尾的常规IP。@F.J:Oops,你说得对。它经过了一些更改,我错过了:)谢谢。@burning\u LEGION对,我编辑了一个更严格的八位字节匹配。@burning\u LEGION对,你说得对,我编辑了一个更严格的八位字节匹配。