Почему разные строки соответствуют шаблону? - PullRequest
1 голос
/ 29 мая 2019

Я использую Java 1.7.

Я ожидаю:

Pattern ddmmyyyyPattern = Pattern.compile("(\\d{1,2}[- /.]\\d{1,2}[- /.]\\d{4})"); 

должно совпадать со строками по крайней мере 2 вхождения разделителей - /. Но следующее соответствует

07 2.3180, 45 3.3183, 19 4.3183, 77 5.3025, 25 6.3023.

Кроме того, 9507 2,31 соответствует

Pattern yyyymmddPattern = Pattern.compile("(\\d{4}[- /.]\\d{1,2}[- /.]\\d{1,2})");

Пожалуйста, помогите мне исправить эту модель!

Ответы [ 3 ]

4 голосов
/ 29 мая 2019

Это произошло потому, что класс символов также соответствует пробелу.

Вы можете использовать группу захвата с обратной ссылкой, чтобы соответствовать шаблону date like.Обратите внимание, что это не проверяет саму дату.

\d{1,2}([-/.])\d{1,2}\1\d{4}

О шаблоне

  • \d{1,2} Совпадение 1 или 2 цифры
  • ([-/.]) Захват всопоставление группы - / или.
  • \d{1,2} Совпадение 1 или 2 цифр
  • \1 Обратная ссылка на то, что записано в группе 1 (поэтому 12 / 12-2019 не будут совпадать)
  • \d{4} Совпадение 4 цифр

На Java:

String regex = "\\d{1,2}([-/.])\\d{1,2}\\1\\d{4}";

Regex demo | Java demo

Обратите внимание, что для совпадения вы можете опустить внешнюю скобку.

2 голосов
/ 29 мая 2019

Вам необходимо удалить пробел из класса символов

\\d{1,2}[- /.]\\d{1,2}[- /.]\\d{4}
           ^             ^ 

изменить на этот

\\d{1,2}[-/.]\\d{1,2}[-/.]\\d{4}
0 голосов
/ 29 мая 2019

Попробуйте этот шаблон:

\d{1,2}([-\/.])\d{1,2}([-\/.])\d{4}

Конечно, пробел должен быть удален из регулярного выражения, и символ "/" должен иметь обратную косую черту перед ним, чтобы его можно было распознать.

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