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

Kep*_*pil 8 java regex

以下两行代码:

System.out.println(Arrays.toString("test".split("(?<!^)")));
System.out.println(Arrays.toString("test".split("(?!^)")));
Run Code Online (Sandbox Code Playgroud)

每个产生相同的输出:

[t, e, s, t]
Run Code Online (Sandbox Code Playgroud)

我期望生产底线

[, t, e, s, t]
Run Code Online (Sandbox Code Playgroud)

因为它应该愿意在^之前和之后分裂t.有人能指出我的想法是错的吗?

Tim*_*ker 7

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

想象一下test像这样的字符串,|表示 字符之间的位置:

|  t  |  e  |  s  |  t  |
^ matches here         ($ matches here)
Run Code Online (Sandbox Code Playgroud)

(?!^)在位置上不匹配,0因为当向前看0个字符时,正则表达式引擎从这里"看到"字符串的开头

(?<!^) 这里不匹配,因为当向后看0个字符时,正则表达式引擎从这里"看到"字符串的开头