регулярное выражение для проверки ip-диапазона из списка ip-адресов
У меня есть регулярное выражение для проверки списка из 50 IP-адресов, разделенных запятыми:
^(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?:,? ?)){1,50}$
Пример списка:
10.10.10.1,127.0.0.1
Теперь мне нужно поддержать список, как это:
10.10.10.1,127.0.0.1-127.0.0.125
Я пытаюсь, использовать подшаблоны, но ничего не получилось
Может ли кто-нибудь привести пример регулярного выражения для проверки этой строки:
127.0.0.1-127.0.0.125
1 ответ:
Здесь можно использовать 2 вещи: использовать класс отрицаемых символов, чтобы соответствовать либо
,
, либо-
, и использовать вызов подстроки, чтобы убедиться, что ваш шаблон остается разумного размера и строка не может начинаться с,
или-
:^((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))(?:[,-](?1)){0,49}$
Смотрите демонстрацию регулярных выражений
Подробности :
^
- начало строки((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))
- Группа 1 захватывает 1 IP-адрес(?:[,-](?1)){0,49}
- от 0 до 49 (поскольку подшаблон выше уже соответствовал 1 IP, он будет суммироваться всего до 50) последовательностей:
[,-]
- класс символов, соответствующий либо,
, либо-
(?1)
- вызов подпрограммы, который "повторяет" подшаблон группы 1 (в отличие от backreference, который соответствует тому же значению , захваченному с группой захвата)$
- конец строки