【发布时间】:2016-04-25 16:19:34
【问题描述】:
我用空格分割一个字符串,然后检查每个部分是否包含代码(&a、&l 等)。如果匹配,我必须抓取彼此相邻的代码,然后按字母数字顺序(0、1、2...a、b、c...)。
这是我目前尝试过的:
String message = "&l&aCheckpoint&m&6doreime";
String[] parts = message.split(" "); // This may not be needed for the example, but I'm only using one word for simplicity here
List<String> orderedMessage = new ArrayList<>();
Pattern pattern = Pattern.compile("((?:&|\u00a7)[0-9A-FK-ORa-fk-or])(.*?)"); // Completely matches the entire pattern, not what i want
for (String part : parts) {
if (pattern.matcher(part).matches()) {
List<String> orderedParts = new ArrayList<>();
// what do i do?
}
}
我需要更改 pattern 的值,使其匹配如下组:
Match: &l&aCheckpoint
Groups that I need: [&l, &a, Checkpoint]
Match: &m&6doreime
Groups that I need: [&m, &6, doreime]
如何匹配每个显示的 Match 并将其分成 3 组(它将每个代码段 (&[0-9A-FK-ORa-fk-or]) 和剩余的文本拆分到另一个代码段?
信息:如果有人想知道为什么,当您向 Minecraft 提交颜色/格式编码文本时,颜色必须排在第一位,或者格式 ([a-fk-or] ) 代码被忽略,因为 Minecraft 从 1.5 开始解析颜色代码。通过对它们进行排序并重新构建消息,它不会依赖于用户或开发人员得到正确的顺序。
【问题讨论】:
标签: java regex regex-lookarounds