要拆分的字符串
abc:def:ghi\:klm:nop
Run Code Online (Sandbox Code Playgroud)
字符串应基于":"分割,"\"是转义字符.所以"\:"不应被视为令牌.
split(":")给出
[abc]
[def]
[ghi\]
[klm]
[nop]
Run Code Online (Sandbox Code Playgroud)
必需的输出是字符串数组
[abc]
[def]
[ghi\:klm]
[nop]
Run Code Online (Sandbox Code Playgroud)
如何才能被忽略
Gum*_*mbo 16
使用后面的断言:
split("(?<!\\\\):")
Run Code Online (Sandbox Code Playgroud)
只有在没有前面的情况下才会匹配\.使用双重转义\\\\是必需的,因为字符串声明需要一个,正则表达式需要一个.
但请注意,如果您希望允许令牌以反斜杠结尾,则不允许您转义反斜杠.要做到这一点,你必须先用所有双反斜杠替换
string.replaceAll("\\\\\\\\", ESCAPE_BACKSLASH)
Run Code Online (Sandbox Code Playgroud)
(其中ESCAPE_BACKSLASH是一个不会出现在输入中的字符串)然后,在使用look-behind断言进行拆分后,将ESCAPE_BACKSLASH字符串替换为带有未转义的反斜杠
token.replaceAll(ESCAPE_BACKSLASH, "\\\\")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4693 次 |
| 最近记录: |