首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IPaddress/前缀的Regex

问IPaddress/前缀的Regex
EN

Stack Overflow用户
提问于 2011-08-10 15:01:50
回答 3查看 2.1K关注 0票数 1

我有一个用于IP地址验证的regex,但是我需要一个前缀验证的regex,其中预期的表单是"IP地址/前缀“。

这些条件是:

  1. 前缀值不应大于128个
  2. ,前缀值应被4.

整除。

有人能帮我创建一个前缀验证的正则表达式吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-10 15:26:44

AFAIK您不能使用regex进行计算(例如,数字%4 == 0 ?)。因此,您必须使用获取所有可能的字符串组合的模式。

试试那个:\b[048]\b|\b[13579][26]\b|\b[2468][048]\b|\b1[02][048]\b|\b11[26]\b

  • \b[048]\b比赛0,4,8
  • \b[13579][26]\b比赛12,16,32,26 etc.
  • \b[2468][048]\b比赛20,24,28,40,44,48 etc.
  • \b1[02][048]\b比赛100,104,108,120,124,128
  • \b11[26]\b比赛112和116

。

注意,定义整个单词的\b (在您的例子中,前缀/后缀)必须与模式匹配。例如,如果没有它,136个可能与[13579][26]相匹配。

编辑:为了允许前导零将模式更改为:\b0{0,2}[048]\b|\b0?[13579][26]\b|\b0?[2468][048]\b|\b1[02][048]\b|\b11[26]\b (请注意,0{0,2}也可以编写为0?0?)。

编辑2:如果拆分ip地址,并且只有一个包含前缀/后缀的字符串,您可能会去掉\b。如果然后调用matches(...),那么没有\b就没有问题了。

matches(...)调用模式(不允许\b,允许前导零):

0{0,2}[048]|0?[13579][26]|0?[2468][048]|1[02][048]|11[26]

票数 2
EN

Stack Overflow用户

发布于 2011-08-10 16:00:03

与使用regex不同,您还可以:

代码语言:javascript
复制
int prefix = Integer.parseInt(ipAddress.split(".")[0]);
if ( (prefix <= 128) && (prefix % 4 == 0)) {
    //success
}
else {
    //failure
}
票数 3
EN

Stack Overflow用户

发布于 2011-08-10 15:15:27

如果要验证IP地址子网前缀号,可以通过包含4到128:/0|4|8|12|16|20|24|28|32|...|120|124|128/的倍数,按蛮力构建正则表达式。

您可以稍微简化这一点,方法是,如果4的倍数在两位数中为even+{0,4,8}或odd+{2,6}。

除了这种蛮力方法之外,没有办法实现您想要的--简洁简洁--对单个字符进行正则化工作,而不是对数字进行语义解释(因此没有比较,也没有算术)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7012991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档