Use a look-behind assertion:
split("(?<!\\):")
This will only match if there is no preceding
. Using double escaping \\
is required as one is required for the string declaration and one for the regular expression.
Note however that this will not allow you to escape backslashes, in the case that you want to allow a token to end with a backslash. To do that you will have to first replace all double backslashes with
string.replaceAll("", ESCAPE_BACKSLASH)
(where ESCAPE_BACKSLASH is a string which will not occur in your input) and then, after splitting using the look-behind assertion, replace the ESCAPE_BACKSLASH string with an unescaped backslash with
token.replaceAll(ESCAPE_BACKSLASH, "")
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…