Проверка IP-адреса с подстановочным знаком - PullRequest
5 голосов
/ 20 января 2011
String ip = "1.1.&.&";
String WILDCARD_CHARACTER = "&";
String REGEX_IP_ADDRESS_STRING = "(?:(?:"
        + WILDCARD_CHARACTER
        + "|25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:"
        + WILDCARD_CHARACTER + "|25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)";
Pattern p = Pattern.compile(REGEX_IP_ADDRESS_STRING1);
Matcher m = p.matcher(ip);
System.out.println("Does it match? " + m.matches());

IP-валидация с вышеуказанным кодом работает отлично. Но я хочу некоторые модификации для символа подстановки, который вызывает проблемы.

Текущий сценарий:

  • 192.1. &. & ------> True
  • 192.1.0.1 ------> True
  • & ------> False
  • 192.1. & ------> False

Ожидаемый:

  • 192.1. &. & ------> False
  • 192.1.0.1 ------> True
  • & ------> True
  • 192.1. & ------> True

т.е. Я хочу подстановить все символы после символа подстановки.

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

Ответы [ 2 ]

5 голосов
/ 20 января 2011

Я предлагаю следующее (я использовал литерал & в этом регулярном выражении; конечно, вы можете изменить это на свою + WILDCARD_CHARACTER конструкцию):

Pattern regex = Pattern.compile(
    "^       # Anchor the match at the start of the string\n" +
    "(?:     # Match either...\n" +
    " &      # the wildcard character\n" +
    " |      # or a number between 0 and 255\n" +
    " (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\n" +
    " \\.    # followed by a dot, followed by...\n" +
    " (?:    # ...either...\n" +
    "  &     # the wildcard character\n" +
    "  |     # or a number etc. etc.\n" +
    "  (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\n" +
    "  \\.\n" +
    "  (?:\n" +
    "   &\n" +
    "   |\n" +
    "   (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\n" +
    "   \\.\n" +
    "   (?:\n" +
    "    &\n" +
    "    |\n" +
    "    (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\n" +
    "   )\n" +
    "  )\n" +
    " )\n" +
    ")\n" +
    "$        # Anchor the match at the end of the string", 
    Pattern.COMMENTS);
0 голосов
/ 20 января 2011

(2 ?: [0-4] \ д | 25 [0-5] | 1 \ д \ д | \ д \ д | \ г). (2 ?: [0-4] \ д | 25[0-5] | 1 \ д \ д | \ д \ д | \ г) (2 ?: [0-4] \ д |. 25 [0-5] | 1 \ д \ д | \ д \ д| \ d). (?: 2 [0-4] \ d | 25 [0-5] | 1 \ d \ d | \ d \ d | \ d) | (?: 2 [0-4] \ d| 25 [0-5] | 1 \ д \ д | \ д \ д |. \ г) (2 ?: [0-4] \ д | 25 [0-5] | 1 \ д \ д | \ д\ d | \ d). (?: 2 [0-4] \ d | 25 [0-5] | 1 \ d \ d | \ d \ d | \ d). & | (?: 2 [0-4] \ д | 25 [0-5] | 1 \ д \ д | \ д \ д |. \ г) (2 ?: [0-4] \ д | 25 [0-5] | 1 \ д \d | \ d \ d | \ d). & | (?: 2 [0-4] \ d | 25 [0-5] | 1 \ d \ d | \ d \ d | \ d). & | &

Все в одной строке должны соответствовать вашим требованиям

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