Страницы

Поиск по вопросам

понедельник, 8 июля 2019 г.

Определить счёт теннисного матча

Нужно определить по строке, что это счет первого сета теннисного матча. Вот паттерн:
private static final String FIRST_SET_PATTERN = "^0:0\\((6:6|[0-5]:[0-5])\\)\\(((@0|@15|@30|@40:0|15|30|40)|(0|15|30|40:0@|15@|30@|40@))";
А вот строки, которые должны подходить под этот паттерн:
String[] { "0:0(1:1)(@0:0)", "0:0(0:0)(15:15@)", "0:0(1:0)(@40:0)", "0:0(0:5)(30:15@)", "0:0(5:5)(0:30@)", "0:0(3:5)(@30:15)", "0:0(6:6)(0:0@)", "0:0(6:6)(40:40@)" };
На этом этапе все работает, но в паттерне нет проверки закрывающей скобки, которой должна заканчиваться строка. Если в конце паттерна добавляю \\)$ то это не работает. В регулярках плаваю, поэтому прошу подсказки.


Ответ

Предлагаю
String pat = "^0:0\\((6:6|[0-5]:[0-5])\\)\\(@?([43]?0|15):([43]?0|15)@?\\)$";
См. демо
При использовании метода Matcher#matches() "якоря" ^ и $ можно опустить.
Подробности
^ - начало строки 0:0 - подстрока 0:0 \( - символ ( (6:6|[0-5]:[0-5]) - 6:6 или цифры от 0 до 5, двоеточие и цифры от 0 до 5 \)\( - подстрока )( @? - 1 или 0 знаков @ ([43]?0|15) - 4, 3 (опционально), а потом 0 -ИЛИ- 15 - двоеточие ([43]?0|15) - 4, 3 (опционально), а потом 0 -ИЛИ- 15 @? - 1 или 0 знаков @ \\) - знак ) $ - конец текста.

Комментариев нет:

Отправить комментарий