Java 为什么在`(?!^`和`(?<;!^)`上拆分会产生相同的答案?

Java 为什么在`(?!^`和`(?<;!^)`上拆分会产生相同的答案?,java,regex,Java,Regex,以下两行代码: System.out.println(Arrays.toString("test".split("(?<!^)"))); System.out.println(Arrays.toString("test".split("(?!^)"))); 我希望底线能产生结果 [, t, e, s, t] 因为它应该愿意在^之后和t之前拆分。有人能指出我的想法哪里错了吗 (?!^)匹配任何不在字符串开头的位置,就像(?)一样。由于^锚点没有任何长度,因此向前看还是向后看都无关紧要 假

以下两行代码:

System.out.println(Arrays.toString("test".split("(?<!^)")));
System.out.println(Arrays.toString("test".split("(?!^)")));
我希望底线能产生结果

[, t, e, s, t]
因为它应该愿意在
^
之后和
t
之前拆分。有人能指出我的想法哪里错了吗

(?!^)
匹配任何不在字符串开头的位置,就像
(?)一样。由于
^
锚点没有任何长度,因此向前看还是向后看都无关紧要

假设字符串
test
如下所示,其中
|
表示字符之间的位置:

|  t  |  e  |  s  |  t  |
^ matches here         ($ matches here)
(?!^)
在位置
0
处不匹配,因为当向前看0个字符时,正则表达式引擎从这里“看到”字符串的开头


(?在这里也不匹配,因为当向后看0个字符时,正则表达式引擎从这里“看到”字符串的开头

在这两种情况下,您有不同的正则表达式。实际上,我希望两者都返回
[t,e,s,t,]
..@TimPietzcker
split
默认情况下会忽略后面的空格。这个-
split((?@TimPietzcker:这是
split()
的一个非常随机的“功能”,我同意。
|  t  |  e  |  s  |  t  |
^ matches here         ($ matches here)