Java 正则表达式基于精确字符进行拆分,除非在转义前加上反斜杠

Java 正则表达式基于精确字符进行拆分,除非在转义前加上反斜杠,java,regex,string,split,delimiter,Java,Regex,String,Split,Delimiter,需要使用分隔符拆分字符串,但前提是分隔符前没有反斜杠 例如:如果有abc\:abc-不要将其拆分为:前面有反斜杠 如果字符串是abc:abc-需要拆分为abc,abc 分隔符可以是:,|,&等。使用lookback作为拆分表达式: String input = "abc \\:abc def : def"; String[] parts = input.split("(?<=[^\\\\]):"); ^^^^ spli

需要使用分隔符拆分字符串,但前提是分隔符前没有反斜杠

例如:如果有
abc\:abc
-不要将其拆分为
前面有反斜杠

如果字符串是
abc:abc
-需要拆分为
abc,abc


分隔符可以是
:,|,&
等。

使用lookback作为拆分表达式:

String input = "abc \\:abc def : def";
String[] parts = input.split("(?<=[^\\\\]):");
                                    ^^^^ split on any non-slash
                                         followed by delimiter
String input=“abc\\:abc def:def”;

String[]parts=input.split((?使用反向查找
(?)要匹配文本反斜杠
\
,必须转义两次。一次转义是因为它是字符串文本,另一次转义是因为它是正则表达式转义字符

String[] parts = string.split("(?<!\\\\)[:,|&]");

String[]parts=String.split(“(?@4castle我测试了你的反向查找功能,它似乎也能正常工作。谢谢你的编辑。谢谢,没问题。这只是一个操作说明,我们的答案之间的唯一区别是正则表达式如何处理字符串开头的分隔符。例如,如果字符串是
:abc
,你的不会拆分,我的会。可能是这样虽然这种情况永远不会发生。你应该使用
(?因为它更简单,但也因为它满足了第一个字符作为分隔符的要求。如果你在后面使用积极的外观,那么那里实际上必须有一个字符(我刚刚注意到4castle已经发布了…)@波希米亚人扮演魔鬼代言人,如果字符串以
字结尾:
,那么最终匹配中不是有一个使用您的方法的分隔符吗?@tim都会在尾部分隔符上进行匹配和拆分,但java的拆分会丢弃空的尾部元素(除非您使用大的或负的
限制调用重载版本
)。区别仅在开始时存在,因为
^
与字符的PLB不匹配。另一个值得注意的地方是,lookarounds断言但不使用。这是需要的行为,即在使用实际分隔符的同时保留非斜杠字符不变。是否能够转义反斜杠,例如
abc\\:def
拆分为
abc\
def
?您好,这是一个有趣的测试用例。是\\应该在一起,并且:应该用于拆分。