Java Проверка IP RegEx с подстановочным знаком * - PullRequest
1 голос
/ 24 февраля 2020

Я пытаюсь сделать свое собственное регулярное выражение для сопоставления с 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])) |? (((25 [0-5] | 2 [0-4] [0-9] |? [01] [0-9] [0-9]?) \.) {1,3} \ *)) $

, но он не работает, как я sh, я хочу дать регулярное выражение с учетом этих условий Пример. :

192.168.1.1 -> действительный

192.168.1. * -> действительный

192.168. *. * -> действительный

192. *. *. * -> действительный


192.168. *. 1 -> недействительный

192. *. 1.1 -> недействительный

192. *. *. 1 -> неверно

*. 168.1.1 -> неверно

1 Ответ

4 голосов
/ 24 февраля 2020

Один из вариантов - использовать положительный прогноз для утверждения 3 следующих точек с 3 цифрами или *

При сопоставлении можно сделать * последней частью и необязательной.

^(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(?=(?:\.(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])|\*)){3}$)(?:\.(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]))*(?:\.\*)*$

Regex demo

Другой вариант - указать все альтернативы:

^(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])|(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.\*|(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.\*\.\*|\*\.\*\.\*)$

Regex demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...