在Java中,我尝试使用String.split()
方法在";"
上分割字符串,但不在"\\\\;"
上。 (2个反斜杠后跟分号)
Ex:"aa;bb;cc\\;dd;ee\\;;ff"
应该分成;
aa
bb
cc\\;dd
ee\\;
ff
如何使用正则表达式完成此操作?
Markus
答案 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