(Sorry for my earlier error. Brain now firmly engaged. Er, probably.)
This works:
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
Breaking it down:
^
= Start of string
\d+
= One or more digits (the \
is escaped because it's in a string, hence \\
)
\.
= A literal .
(or your original [.]
is fine) (again, escaped in the string)
\s
= One whitespace char (no need for the {1}
after it) (I'll stop mentioning the escapes now)
\p{Lu}+
= One or more upper case letters (using the proper Unicode escape — thank you, tchrist, for pointing this out in your comment below. In English terms, the equivalent would be [A-Z]+
)
.*
= Anything else
See the documentation here for details.
You only need the .*
at the end if you're using a method like String#match
(above) that will try to match the entire string.