Java - Извлечение строк с помощью Regex

Я эту строку

String myString ="A~BC~FGH~~zuzy|XX~ 1234~ ~~ABC~01/01/2010 06:30~BCD~01/01/2011 07:45";

и мне нужно извлечь эти 3 подстроки
1234
06:30
07:45

Если я использую это регулярное выражение \\ d {2} \: \\ d {2}, я смогу извлечь только первый час 06:30

Pattern depArrHours = Pattern.compile("\\d{2}\\:\\d{2}");
Matcher matcher = depArrHours.matcher(myString);
String firstHour = matcher.group(0);
String secondHour = matcher.group(1); (IndexOutOfBoundException no Group 1)

matcher.group (1) выдает исключение.
Также я не знаю, как извлечь 1234. Эта строка может измениться, но она всегда появляется после «XX ~».
Есть ли у вас какие-либо идеи о том, как сопоставить эти строки с выражениями регулярных выражений?

UPDATE

Благодаря предложению Адама у меня теперь есть это регулярное выражение, соответствующее моей строке

Pattern p = Pattern.compile(".*XX~ (\\d{3,4}).*(\\d{1,2}:\\d{2}).*(\\d{1,2}:\\d{2})";

Я сопоставляю число и 2 часа с matcher.group (1); matcher.group (2); matcher.group (3);

Ответы на вопрос(1)

Ваш ответ на вопрос