我用空格分割一個字符串,然後檢查每個部分是否包含代碼(& a,& l等)。如果匹配,我必須抓住彼此相鄰的代碼,然後按字母數字順序排列(0,1,2 ... a,b,c ...)。對Bukkit ChatColor表達式進行匹配和排序
這裏是我試過到目前爲止:
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]
)和其餘的文本分割成另一個代碼段)?
信息:對於任何想知道爲什麼,當您將顏色/格式編碼文本提交給我的世界時,顏色必須先到達,或格式([a-fk-or]
)代碼因爲Minecraft自1.5分析顏色代碼的方式而被忽略。通過整理它們並重建消息,它不會依賴用戶或開發人員獲得正確的訂單。
當你用'(?=&)'分割代碼時,我怎樣才能用1或2個&分割它。例如:'&& l && a&mCheckpoint'將爲代碼顯示'[&,&l,&&a,&m]',但我想要'[&& l,&& a,&m]'。 –
如果你想這樣做,你可以在主正則表達式的&選項後面加上字符,即'(((?:&|§)[0-9A-FK-ORa-fk-or]?)+) ([^&] *)' (注意?字符匹配之後) 這將使'&&升&&一個&mCheckpoint'顯示 '[&,&L,&,重組,和米],Checkpoint' –
我切換的代碼將正則表達式拆分爲負面後視圖'(?<!&)',它實現了我所期待的。謝謝您的幫助。 –