Как разбить строку на три подстроки по определенному правилу? (Используя Java regex)

Пишу простенький чат и решил заодно попробовать разобраться с java regex. Потратив пару часов и не придя к результату, понял, что что-то делаю не так. Я попытался разбить строку на 3 части по определенному правилу. Например: есть строка "/w имя_получателя какое-то сообщение любой длинны" при разбитии её на подстроки должно получится "/w", "Пользователь", "какое-то сообщение любой длинны". На этом месте пока затык, буду рад Вашей помощь. Желательно подробно объяснить, как это делать чтобы я получил представление как разбивать строки regex в дальнейшем.

public class test {
    public static void main(String[] args) {
        String message = "/w herename some message is here";
       sendMessage(message.split(" ")[1], message); /*вместо message регулярное выражение 
которое пропускает первые два слова "/w herename".
/w неизменна и всегда находится в начале сообщения,
herename может быть любым с любыми символами, но это всегда одного слово.*/

    }

    public static void sendMessage(String from, String message) {
        System.out.println(from + " whisper you: " + message);
    }
}

Ответы (2 шт):

Автор решения: wigravy

Решил просто ограничив число разбития строк с помощью split(" ", 3).

public static void main(String[] args) {
        String message = "/w herename  zdv zxcvxzvc zxcvzxcv zxcvvzxcv zxcvzxxzv asD  dfsg sdf gsdfzzfdome message is here";
        sendMessage(message.split(" ")[1], message.split(" ", 3)[2]); /*вместо message регулярное выражение
которое пропускает первые два слова "/w herename".
/w неизменна и всегда находится в начале сообщения,
herename может быть любым с любыми символами, но это всегда одного слово.*/

    }

    public static void sendMessage(String from, String message) {
        System.out.println(from + " whisper you: " + message);
    }
→ Ссылка
Автор решения: lampa

Регулярные выражения это просто. С помощью них мы описываем шаблон, применяемый для поиска строки в тексте. Для описания шаблона нужно знать синтаксис регулярных выражений. Например знак \w означает последовательность букв, цифр и знака подчеркивания, . любой символ, квантификатор + задает количество символов 1 и более для поиска, а квантификатор ? после другого квантификатора говорит о том, что поиск ленивый и будет останавливаться при первом совпадении.

Соответственно /w herename some message is here переводим в шаблон: /w .+? (.+) и через Matcher вытаскиваем содержимое (.+):

String text = "/w herename some message is here";
Pattern pattern = Pattern.compile("/w .+? (.+)");
Matcher matcher = pattern.matcher(text);

if (matcher.find()) {
    System.out.println(matcher.group(1));
}
→ Ссылка