【问题标题】:Java IP validation RegEx with wildcard *带有通配符的 Java IP 验证 RegEx *
【发布时间】:2020-06-08 03:30:57
【问题描述】:

我正在尝试制作自己的正则表达式来匹配 IP 以及 * 通配符 我现在自己的正则表达式是:

^((((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}\*))$

但它没有按我的意愿工作, 鉴于此条件,我想给出正则表达式 例如:

192.168.1.1 --> 有效

192.168.1.* --> 有效

192.168.*.* --> 有效

192.*.*.* --> 有效


192.168.*.1 --> 无效

192.*.1.1 --> 无效

192.*.*.1 --> 无效

*.168.1.1 --> 无效

【问题讨论】:

    标签: java regex spring regex-group


    【解决方案1】:

    一种选择是使用正向前瞻来断言 3 个后续点,其中包含 3 个数字或 *

    匹配时,您可以将* 作为最后一部分并且是可选的。

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

    Regex demo

    另一种选择是拼出所有备选方案:

    ^(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])|(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.\*|(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.\*\.\*|\*\.\*\.\*)$
    

    Regex demo

    【讨论】:

    • @Springmailer 我已经用范围更新了模式。
    • 顺便说一下,IP 号码模式仍然是无效的,因为允许像01。所以前导零。
    • @Eraklon 你说得对,我已经用一个稍微限制性的模式更新了它。
    • 哦,您可以通过将 [0-9] 替换为 \d 来使其更短/更具可读性。
    猜你喜欢
    • 2012-07-03
    • 2016-01-26
    • 2011-06-12
    • 2012-01-06
    • 2014-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多