IP地址的正则表达式,最后一部分非零

时间:2019-02-27 03:47:46

标签: java regex regex-group

这是我的IP地址正则表达式。如何修改它以在最后一部分中排除0(零)。

^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\d\d?|2[0-4]\d|25[0-5])$

示例:

148.23.54.20 //有效

148.23.54.0 //无效

3 个答案:

答案 0 :(得分:1)

确保您的电话号码不是以零开头 ...

[1-9]\d?

例如,您的正则表达式以

结尾
\.([1-9]|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])$

这将允许1到255。

为清楚起见,多余的转义符被忽略了。

侧注

对于其他3个可以为0的情况,只需添加一个仅包含0的选项

\.(0|[1-9]|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])

答案 1 :(得分:1)

仅特殊处理最后一部分

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

答案 2 :(得分:-1)

非正则表达式解决方案如何

String ip = /* some ip */;
String[] bytes = ip.split("\\.");
if (!bytes[3].equals("0") && Arrays.stream(bytes).map(Integer::parseInt).allMatch(i -> i >= 0 && i < 256)) {
    //Valid ip
}

如果您还希望得到一些疯狂的输入,则可以检查IntegerParseException并进行一些边界检查。我认为这更容易阅读,因此可以维护