我有一个用于IP地址验证的regex,但是我需要一个前缀验证的regex,其中预期的表单是"IP地址/前缀“。
这些条件是:
整除。
有人能帮我创建一个前缀验证的正则表达式吗?
发布于 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]
发布于 2011-08-10 16:00:03
与使用regex不同,您还可以:
int prefix = Integer.parseInt(ipAddress.split(".")[0]);
if ( (prefix <= 128) && (prefix % 4 == 0)) {
//success
}
else {
//failure
}发布于 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}。
除了这种蛮力方法之外,没有办法实现您想要的--简洁简洁--对单个字符进行正则化工作,而不是对数字进行语义解释(因此没有比较,也没有算术)。
https://stackoverflow.com/questions/7012991
复制相似问题