String split方法很常用,比如"1,2,3,4,5".split(",")返回["1","2","3","4","5"],如果想保留分隔符呢?答案是利用正则表达式的环视功能。
(?=X)
X, via zero-width positive lookahead
(?!X)
X, via zero-width negative lookahead
(?<=X)
X, via zero-width positive lookbehind
(?
X, via zero-width negative lookbehind
java API中的说明
lookahead 向前看 lookbehind向后看
什么是前?什么是后?
向后查找(Lookbehind)则是指搜索当前位置的左面部分。请谨记,环视结构只是向前或向后看,实际上并不改变输入字符串的当前位置。
向前查找(lookahead) 指搜索当前未知的右面部分
所以上面可以理解为左边是什么/左边不是什么 右边是什么 /右边不是什么
环视只匹配位置,不会消耗字符,所以上面的问题也就很容易解决了,只要匹配左边不是逗号右边是逗号,以及左边是逗号右边不是逗号,匹配这两种位置,就能把分隔符也保留下来。
Pattern p = pile("(?<=<=)|(?=<=)|(?<==)|(?=>=)|(?<=>)(?!=)|(?=>)|(?<===)|(?===)|(?<=!=)|(?=!=)");
上面这个正则用来切分 endDate >= startDate,endDate > startDate 这样的表达式,切分结果为三部分。