我有一个用于IP地址验证的正则表达式,但是我需要一个用于前缀验证的正则表达式,其预期形式为“ IP地址/前缀”。

条件是:


前缀值不应大于128
前缀值应可被4整除。


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

最佳答案

AFAIK,您不能使用正则表达式进行计算(例如,数字%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等
\b[2468][048]\b匹配20、24、28、40、44、48等。
\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]

关于java - IP地址/前缀的正则表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7012991/

10-11 14:25