用于验证 ip-list 中的 ip-range 的正则表达式

regex for validating ip-range from ip-list

我有用于验证逗号分隔的 50 ips 列表的正则表达式:

^(?:(?:(?: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]?)(?:,? ?)){1,50}$

列表示例:

10.10.10.1,127.0.0.1

现在我需要支持列表,像这样:

10.10.10.1,127.0.0.1-127.0.0.125

我尝试使用子模式,但什么也没发生

有人可以提供用于验证此字符串的正则表达式示例吗:

127.0.0.1-127.0.0.125

你可以在这里使用两件事:使用否定字符 class 来匹配 ,-,并使用子路由调用来确保你的模式保持合理大小并且字符串不能以 ,-:

开头
^((?:(?: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]?))(?:[,-](?1)){0,49}$

regex demo

详情:

  • ^ - 字符串开头
  • ((?:(?: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]?)) - 第 1 组捕获 1 个 IP 地址
  • (?:[,-](?1)){0,49} - 0 到 49(因为上面的子模式已经匹配了 1 个 IP,所以总计将达到 50 个)序列:
    • [,-] - 字符 class 匹配 ,-
    • (?1) - "repeats" 组 1 子模式的子例程调用(不同于与捕获组捕获的相同 value 匹配的反向引用)
  • $ - 字符串结尾