我有一个这样的字符串:
"tag0 tag1 yellow\ green tag2"
我想在每个未转义的空格之后拆分它,所以我得到了这个结果:
result[0] = "tag0"
result[1] = "tag1"
result[2] = "yellow\ green"
result[3] = "tag2"
有什么功能可以帮我吗?带有正则表达式"[^\\] "
的{{3}}也删除了最后一个字符,我想避免使用它。这是我用string.split和"[^\\] "
得到的:
result[0] = "tag"
result[1] = "tag"
result[2] = "yellow\ gree"
result[3] = "tag2"
答案 0 :(得分:1)
使用负面的lookbehind可能是一种解决方法,但它不能保证前面的反斜杠本身不是一个转义反斜杠。例如:
tag0 tag1 yellow\\ green tag2
如果你可以避免分裂,而是在下面进行匹配,那么regex会匹配预期的块:
[^\s\\]+(?:\\.[^\s\\]*)*
故障:
[^\s\\]+
匹配除空格和反斜杠之外的任何内容(?:
启动非capturin组
\\.
匹配转义字符[^\s\\]*
匹配除空格和反斜杠之外的任何内容)*
NCG结束,重复次数爪哇:
String regex = "[^\\s\\\\]+(?:\\\\.[^\\s\\\\]*)*";
String string = "tag0 tag1 yellow\\ green tag2";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}