Ответ 1
(Извините за мою предыдущую ошибку. Мозг теперь крепко занят. Er, возможно.)
Это работает:
String rex = "^\\d+\\.\\s\\p{Lu}+.*";
System.out.println("1. PTYU fmmflksfkslfsm".matches(rex));
// true
System.out.println(". PTYU fmmflksfkslfsm".matches(rex));
// false, missing leading digit
System.out.println("1.PTYU fmmflksfkslfsm".matches(rex));
// false, missing space after .
System.out.println("1. xPTYU fmmflksfkslfsm".matches(rex));
// false, lower case letter before the upper case letters
Разрушение:
-
^
= начало строки -
\d+
= Одна или несколько цифр (\
экранируется, потому что она в строке, следовательно\\
) -
\.
= Литерал.
(или ваш оригинальный[.]
в порядке) (опять же, экранированный в строке) -
\s
= Один пробел char (после него не нужно{1}
) (я перестану упоминать экраны) -
\p{Lu}+
= Один или несколько букв в верхнем регистре (используя правильный Unicode escape — спасибо, tchrist, за то, что указали это в своем комментарии ниже. В английских терминах эквивалент будет[A-Z]+
) -
.*
= Что-нибудь еще
Подробнее см. здесь документацию.
Вам нужно только .*
в конце, если вы используете метод типа String#match
(выше), который будет пытаться сопоставить всю строку.