Вы можете использовать это регулярное выражение для сопоставления данных в соответствии с вашим образцом в сообщении,
\[(?:[^\]]*)\]|([a-zA-Z]+(?:\s+[a-zA-Z]+)*)
В качестве чередования есть два под-выражения, где \[(?:[^\]]*)\]
будет захватывать любой текст, который будет иметь форму [somedata]
, а ([a-zA-Z]+(?:\s+[a-zA-Z]+)*)
регулярное выражение будет захватывать данные формы somedata
или somedata somemoredata somemoredatafurther
Демо
Примеры кодов Java,
String s = "[Sometext]MoreText[SomeOtherText] I am hoping to get [SomeText], MoreText, [SomeOtherText]";
Pattern p = Pattern.compile("\\[(?:[^\\]]*)\\]|([a-zA-Z]+(?:\\s+[a-zA-Z]+)*)");
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println(m.group());
}
печать
[Sometext]
MoreText
[SomeOtherText]
I am hoping to get
[SomeText]
MoreText
[SomeOtherText]