You could use a positive lookahead (?=.{3,15}$
to check if the string has a length from 3 - 15 characters.
Because the minimum length of the string is 3 and has to start and end with a-zA-Z you can combine the 2 character classes in the middle in this case.
I think your pattern could be simplified by removing the repetition of the group due to the positive lookahead to:
^(?=.{3,15}$)[a-zA-Z]+[\\s'.a-zA-Z-]*[a-zA-Z]+$
Explanation
^
Start of the string
(?=.{3,15}$)
Positive lookahead to assert the lenght 3-15
[a-zA-Z]+
Match 1+ times a lower/upper case char a-z
[\\s'.a-zA-Z-]*
Charater class to match any of the listed 0+ times
[a-zA-Z]+
Match 1+ times a lower/upper case char a-z
$
End of the string
See the Java demo