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

时间:2011-01-13 15:50:50

标签: java regex

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

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

aa

bb

cc\\;dd

ee\\;

ff

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

Markus

3 个答案:

答案 0 :(得分:10)

使用

"aa;bb;cc\\;dd;ee\\;;ff".split("(?<!\\\\);");

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

(?<!\\);

答案 1 :(得分:5)

这称为负面后瞻,语法类似于(?<!a)b。这匹配在a之前的任何b上。你会想要这样的东西:

(?<!\\\\);

答案 2 :(得分:0)

这里有一个代码示例。作为分隔符:

String p = "hello.regex\\.brain\\.twister";
System.out.println( p );
for (String s : p.split( "(?<!\\\\)\\.", -1 )) {
  System.out.println( "-> "+ s );
}

输出:

hello.regex\.brain\.twister
-> hello
-> regex\.brain.\twister