Why do you match spaces separately from other characters? And why do you set the match at the beginning, but not at the end? If you want the line not to start or end with a space, you should do something like this:
^[A-Za-z0-9_.&,-]+(?:\s+[A-Za-z0-9_.&,-]+)*$
Now there is only one “path” that the regex engine can take through a string. If a character that matches [A-Za-z0-9_.&,-] runs through before reaching the end, and the next character does not match \s , it will work immediately. If it reaches the end, still matching the space characters, it fails because for each space run it is necessary to combine at least one character without spaces.
If you want to make sure that there is only one whitespace separating runs without spaces, just remove the quantifier from \s+ :
^[A-Za-z0-9_.&,-]+(?:\s[A-Za-z0-9_.&,-]+)*$
If you don't care where the space refers to the non-space, just map them all to the same character class:
^[A-Za-z0-9_.&,\s-]+$
I assume that you know that your regular expression will not match the specified input due to : and ( in the emoticon, and you just want to know why it takes so long to fail.
And of course, since you are creating a regular expression in the form of a Java string literal, you should write:
"^[A-Za-z0-9_.&,-]+(?:\\s+[A-Za-z0-9_.&,-]+)*$"
or
"^[A-Za-z0-9_.&,-]+(?:\\s[A-Za-z0-9_.&,-]+)*$"
or
"^[A-Za-z0-9_.&,\\s-]+$"
(I know that you had a double backslash in the original question, but that was probably just to make them display correctly, since you did not use SO's excellent code formatting function.)