Точка и \s
оба соответствуют пробельным символам. Это может привести к ненужному возврату. Что сделать вы хотите сопоставить? Возможно, какой-нибудь символ, включая разрывы строк?
Тогда просто используйте ленивую точку с включенной опцией dot-match-newlines:
Pattern p=Pattern.compile("<@a>.+?</@a>", Pattern.DOTALL);
Вы знаете, что у вас возникнут проблемы, если в ваши входные данные могут быть вложены теги <@a>
?