[英]Splitting a string in Java on “;”, but not on “\\;”
在Java中我尝试使用String.split()
方法在";"
上拆分字符串 ,但不是"\\\\\\\\;"
。 (2个反斜杠后跟分号)
例如: "aa;bb;cc\\\\;dd;ee\\\\;;ff"
应分成;
aa
bb
cc\\;dd
ee\\;
ff
如何使用正则表达式完成此操作?
马库斯
采用
"aa;bb;cc\\;dd;ee\\;;ff".split("(?<!\\\\);");
(?<!...)被称为“零宽度后视”。 在英语中,你是分裂的;
不带双斜杠的字符,实际上不匹配双斜杠。 四重斜杠是将反斜杠转义为正则表达式解析器。 然后,拆分中使用的实际正则表达式将读取:
(?<!\\);
这称为负后观,语法类似于(?<!a)b
。 这匹配在a之前的任何b上。 你会想要这样的东西:
(?<!\\\\);
这里有一个代码示例。 作为分隔符:
String p = "hello.regex\\.brain\\.twister";
System.out.println( p );
for (String s : p.split( "(?<!\\\\)\\.", -1 )) {
System.out.println( "-> "+ s );
}
Will Ouptut:
hello.regex\.brain\.twister
-> hello
-> regex\.brain.\twister
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.