在分隔符处拆分不跟随'\'的字符串

时间:2012-11-15 19:51:25

标签: java regex string split

我正在寻找一种方法,在特定分隔符的最后出现时将String分成两部分。我知道当String看起来像这样很容易做到:

String s = "prefix.key value";
String[] a = s.split("[ :=]",2);

但按照惯例,字符串可能包含转义分隔符(直接在分隔符前面加上'\')。所以我更新了regex-String:

String s = "prefix\ key value";
String[] a = s.split("[^\\\\][ :=]",2);

这会将String拆分到几乎正确的位置,但它会切断键的“y”。这是因为现在正则表达式将分隔符与其前面的字符匹配。 split()方法会删除匹配的部分,只返回剩余的字符串。

我有一个使用split()的工作解决方案,并查看返回数组中字符串的结束字符,但这似乎是一种过于复杂和缓慢的方法。

有没有人有更好的主意?

2 个答案:

答案 0 :(得分:1)

使用negative lookbehind assertion

String[] a = s.split("(?<!\\\\)[ :=]",2);

因此,如果不在\

之前,您的角色类将匹配

答案 1 :(得分:0)

我会根据stema的回答发表评论,但我还没有发表评论。我只是想对现有的正则表达式进行一些小改动。

(?<!\\)[ :=]

否则转义代码需要两个反斜杠而不是一个反斜杠。