微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

正则表达式验证逗号分隔的 IPv4 和 cidr

如何解决正则表达式验证逗号分隔的 IPv4 和 cidr

我有这个正则表达式可以验证 IPV4 和 IPV6 ip 地址和 CIDR,但我只想验证 ipv4 地址和 cidr

^(((((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/([1-9]|1[0-9]|2[0-8]|3[0-2])){0,1}){0,1})|((((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,5})|((:[0-9A-Fa-f]{1,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,6})|((:[0-9A-Fa-f]{1,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,7})|((:[0-9A-Fa-f]{1,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8])){0,1})))((\s*,\s*)(?=[^,])){0,1})+$

有人可以帮助我吗?

解决方法

去除不必要的:

^(((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/([1-9]|1[0-9]|2[0-8]|3[0-2])){0,1}){0,1}((\s*,\s*)(?=[^,])){0,1})+$

regex proof

说明

--------------------------------------------------------------------------------
  ^                        the beginning of the string
--------------------------------------------------------------------------------
  (                        group and capture to \1 (1 or more times
                           (matching the most amount possible)):
--------------------------------------------------------------------------------
    (                        group and capture to \2 (between 0 and 1
                             times (matching the most amount
                             possible)):
--------------------------------------------------------------------------------
      (                        group and capture to \3 (3 times):
--------------------------------------------------------------------------------
        (                        group and capture to \4:
--------------------------------------------------------------------------------
          [0-9]                    any character of: '0' to '9'
--------------------------------------------------------------------------------
         |                        OR
--------------------------------------------------------------------------------
          [1-9]                    any character of: '1' to '9'
--------------------------------------------------------------------------------
          [0-9]                    any character of: '0' to '9'
--------------------------------------------------------------------------------
         |                        OR
--------------------------------------------------------------------------------
          1                        '1'
--------------------------------------------------------------------------------
          [0-9]{2}                 any character of: '0' to '9' (2
                                   times)
--------------------------------------------------------------------------------
         |                        OR
--------------------------------------------------------------------------------
          2                        '2'
--------------------------------------------------------------------------------
          [0-4]                    any character of: '0' to '4'
--------------------------------------------------------------------------------
          [0-9]                    any character of: '0' to '9'
--------------------------------------------------------------------------------
         |                        OR
--------------------------------------------------------------------------------
          25                       '25'
--------------------------------------------------------------------------------
          [0-5]                    any character of: '0' to '5'
--------------------------------------------------------------------------------
        )                        end of \4
--------------------------------------------------------------------------------
        \.                       '.'
--------------------------------------------------------------------------------
      ){3}                     end of \3 (NOTE: because you are using
                               a quantifier on this capture,only the
                               LAST repetition of the captured
                               pattern will be stored in \3)
--------------------------------------------------------------------------------
      (                        group and capture to \5:
--------------------------------------------------------------------------------
        [0-9]                    any character of: '0' to '9'
--------------------------------------------------------------------------------
       |                        OR
--------------------------------------------------------------------------------
        [1-9]                    any character of: '1' to '9'
--------------------------------------------------------------------------------
        [0-9]                    any character of: '0' to '9'
--------------------------------------------------------------------------------
       |                        OR
--------------------------------------------------------------------------------
        1                        '1'
--------------------------------------------------------------------------------
        [0-9]{2}                 any character of: '0' to '9' (2
                                 times)
--------------------------------------------------------------------------------
       |                        OR
--------------------------------------------------------------------------------
        2                        '2'
--------------------------------------------------------------------------------
        [0-4]                    any character of: '0' to '4'
--------------------------------------------------------------------------------
        [0-9]                    any character of: '0' to '9'
--------------------------------------------------------------------------------
       |                        OR
--------------------------------------------------------------------------------
        25                       '25'
--------------------------------------------------------------------------------
        [0-5]                    any character of: '0' to '5'
--------------------------------------------------------------------------------
      )                        end of \5
--------------------------------------------------------------------------------
      (                        group and capture to \6 (between 0 and
                               1 times (matching the most amount
                               possible)):
--------------------------------------------------------------------------------
        \/                       '/'
--------------------------------------------------------------------------------
        (                        group and capture to \7:
--------------------------------------------------------------------------------
          [1-9]                    any character of: '1' to '9'
--------------------------------------------------------------------------------
         |                        OR
--------------------------------------------------------------------------------
          1                        '1'
--------------------------------------------------------------------------------
          [0-9]                    any character of: '0' to '9'
--------------------------------------------------------------------------------
         |                        OR
--------------------------------------------------------------------------------
          2                        '2'
--------------------------------------------------------------------------------
          [0-8]                    any character of: '0' to '8'
--------------------------------------------------------------------------------
         |                        OR
--------------------------------------------------------------------------------
          3                        '3'
--------------------------------------------------------------------------------
          [0-2]                    any character of: '0' to '2'
--------------------------------------------------------------------------------
        )                        end of \7
--------------------------------------------------------------------------------
      ){0,1}                   end of \6 (NOTE: because you are using
                               a quantifier on this capture,only the
                               LAST repetition of the captured
                               pattern will be stored in \6)
--------------------------------------------------------------------------------
    ){0,1}                   end of \2 (NOTE: because you are using a
                             quantifier on this capture,only the
                             LAST repetition of the captured pattern
                             will be stored in \2)
--------------------------------------------------------------------------------
    (                        group and capture to \8 (between 0 and 1
                             times (matching the most amount
                             possible)):
--------------------------------------------------------------------------------
      (                        group and capture to \9:
--------------------------------------------------------------------------------
        \s*                      whitespace (\n,\r,\t,\f,and " ")
                                 (0 or more times (matching the most
                                 amount possible))
--------------------------------------------------------------------------------,','
--------------------------------------------------------------------------------
        \s*                      whitespace (\n,and " ")
                                 (0 or more times (matching the most
                                 amount possible))
--------------------------------------------------------------------------------
      )                        end of \9
--------------------------------------------------------------------------------
      (?=                      look ahead to see if there is:
--------------------------------------------------------------------------------
        [^,]                     any character except: ','
--------------------------------------------------------------------------------
      )                        end of look-ahead
--------------------------------------------------------------------------------
    ){0,1}                   end of \8 (NOTE: because you are using a
                             quantifier on this capture,only the
                             LAST repetition of the captured pattern
                             will be stored in \8)
--------------------------------------------------------------------------------
  )+                       end of \1 (NOTE: because you are using a
                           quantifier on this capture,only the LAST
                           repetition of the captured pattern will be
                           stored in \1)
--------------------------------------------------------------------------------
  $                        before an optional \n,and the end of the
                           string

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。