Eu estou tentando recriar as mensagens maneira discórdia Analisa com dentro dele é emoji.
Por exemplo, eu quero a mensagem Hello, :smile::hearth: world!
a divisão na seguinte matriz:
["Hello, ", ":smile:", ":hearth:", " world!"]
Eu já tentei dividir a matriz com o seguinte código:
Arrays.toString(message.split("(:[A-Za-z]+:)"))
No entanto, o método split remove os delimitadores encontrados. Então os olhares resultado final como este:
["Hello", , , " world!"]
A partir de sua cadeia de entrada e resultados esperados, posso inferir que você quer dividir sua seqüência, basicamente, de três regras.
- Dividir a partir do ponto que é precedido e seguido por um cólon
- Dividir a partir do ponto que está precedido por um espaço e seguido por um cólon
- Dividir a partir do ponto que está precedido por um cólon e seguido por um espaço
Daí você pode usar esse regex usando alternâncias para todos os três casos acima mencionados.
(?<=:)(?=:)|(?<= )(?=:)|(?<=:)(?= )
código Java,
String s = "Hello, :smile::hearth: world!";
System.out.println(Arrays.toString(s.split("(?<=:)(?=:)|(?<= )(?=:)|(?<=:)(?= )")));
Prints como o seu resultado esperado,
[Hello, , :smile:, :hearth:, world!]
Além disso, como uma alternativa se você pode usar combinando o texto em vez de dividir, a regex seria muito mais simples de usar e que seria isso,
:[^:]+:|\S+
Regex demonstração usando jogo
código Java,
String s = "Hello, :smile::hearth: world!";
Pattern p = Pattern.compile(":[^:]+:|\\S+");
Matcher m = p.matcher(s);
while(m.find()) {
System.out.println(m.group());
}
Prints,
Hello,
:smile:
:hearth:
world!