在Java上拆分字符串";",而不是"\\;"

Mar*_*s K 3 java regex

在Java中,我尝试尝试使用String.split()拆分字符串的方法";",但不打开"\\\\;".(2个反斜杠后跟分号)

例:"aa;bb;cc\\;dd;ee\\;;ff"应该分成;

aa

bb

cc\\;dd

ee\\;

ff
Run Code Online (Sandbox Code Playgroud)

如何使用正则表达式完成此操作?

马库斯

Luk*_*der 10

使用

"aa;bb;cc\\;dd;ee\\;;ff".split("(?<!\\\\);");
Run Code Online (Sandbox Code Playgroud)

(?<!...)被称为"零宽度后视".在英语中,您将拆分所有带双斜杠的;字符,而不实际匹配双斜杠.四重斜杠是将反斜杠转义为正则表达式解析器.然后,拆分中使用的实际正则表达式将读取:

(?<!\\);
Run Code Online (Sandbox Code Playgroud)

  • 我不知道......我对所有反斜杠感到困惑:-)我检查了我的代码,它匹配正确... (2认同)

Jef*_*eff 5

这被称为负面的lookbehind,语法就像(?<!a)b.这匹配在a之前的任何b上.你会想要这样的东西:

(?<!\\\\);
Run Code Online (Sandbox Code Playgroud)