Java 使用通配符的 IP 验证正则表达式 *

Java IP validation RegEx with wildcard *

我正在尝试制作自己的正则表达式来匹配 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}\*))$

但它并没有像我希望的那样工作, 鉴于此条件,我想给出正则表达式 Ex.:

192.168.1.1 --> 有效

192.168.1.* --> 有效

192.168.*.* --> 有效

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


192.168.*.1 --> 无效

192.*.1.1 --> 无效

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

*.168.1.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