Использование регулярных выражений в Java

227
26 ноября 2016, 19:26

Есть предложение:"Я родился 02.08.1996. А мой брат 09.03.2000". Если строка содержит число, месяц и год - нужно вернуть true; если нет - то false. Вот мой код. В регулярных выражениях я очень слаб. Что нужно исправить в второй строке?

public static void date(String s) {
    Pattern p = Pattern.compile("/([0-2]\\d|3[01])\\.(0\\d|1[012])\\.(\\d{4})/");
    Matcher m = p.matcher(s);
    boolean b = m.matches();
    System.out.println(b);
}
Answer 1

Как минимум, в Вашем коде проблема в том, что Вам нужно проверить, содержится ли в одной строке другая строка (соответствующая заданному регулярному выражению), Вы же, вызывая метод matches(), проверяете равенство строк.

Я бы реализовал это вот так:

String s = "Я родился 02.08.1996. А мой брат 09.03.2000";
Pattern p = Pattern.compile("[\\d]{2}.[\\d]{2}.[\\d]{4}");
Matcher m = p.matcher(s);
boolean b = m.find();
System.out.println(b);

UPD. Подробнее про саму регулярку[\\d]{2}.[\\d]{2}.[\\d]{4}:

  • [\\d]{2} – два цифровых символа;
  • . – точка;
  • [\\d]{2} – два цифровых символа;
  • . – точка;
  • [\\d]{4} – четыре цифровых символа.

UPD 2. Регулярка для проверки дат формата DD.MM.YYYY:

^(0?[1-9]|[12][0-9]|3[01]).(0?[1-9]|1[012]).\d{4}$
READ ALSO
JSR 336 - фитчер позволяющий выполнять switch на string

JSR 336 - фитчер позволяющий выполнять switch на string

Есть такой не непосредственной связанный с программированием вопрос, а косвенный

218
Результат не выводится в консоль

Результат не выводится в консоль

Решать ничего не надо! Зато объясните, почему результат в консоль не выводится??

245
Как запустить .exe находящися в ресурсах jar?

Как запустить .exe находящися в ресурсах jar?

Добрый вечер, есть не большая программа которую я могу запустить с помощью своего java кода данной конструкцией

303