Regex для IP-адреса / префикса - PullRequest
       12

Regex для IP-адреса / префикса

0 голосов
/ 10 августа 2011

У меня есть регулярное выражение для проверки IP-адреса, но мне нужно регулярное выражение для проверки префикса, где ожидаемая форма - «IP-адрес / Префикс».

Условия:

  1. Значение префикса не должно превышать 128

  2. Значение префикса должно делиться на 4.

Может ли кто-нибудь помочь мне создать регулярное выражение для проверки префикса?

Ответы [ 3 ]

2 голосов
/ 10 августа 2011

Вместо использования регулярных выражений вы также можете сделать:

int prefix = Integer.parseInt(ipAddress.split(".")[0]);
if ( (prefix <= 128) && (prefix % 4 == 0)) {
    //success
}
else {
    //failure
}
1 голос
/ 10 августа 2011

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: вы можете избавиться от\b, если вы разделяете IP-адрес и имеете только строку, содержащую префикс / суффикс.Если после этого вы наберете matches(...), у вас все будет в порядке без \b.

Шаблон для matches(...) вызовов (без \b, допускаются начальные нули):
0{0,2}[048]|0?[13579][26]|0?[2468][048]|1[02][048]|11[26]

1 голос
/ 10 августа 2011

Если вы хотите проверить номер префикса подсети IP-адреса, вы можете построить регулярное выражение методом грубой силы, включив кратные числа от 4 до 128: /0|4|8|12|16|20|24|28|32|...|120|124|128/

Вы можете немного упростить это, отметив, чтоесли кратные 4 заканчиваются на две цифры четные + {0,4,8} или нечетные + {2,6}.

За исключением этого метода грубой силы, нет способа реализовать то, что вы хотите, чисто и компактно- регулярные выражения работают с отдельными символами, а не с семантической интерпретацией числа (поэтому нет сравнений, нет арифметики).

...