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,]
..@TimPietzckersplit
默认情况下会忽略后面的空格。这个-split((?@TimPietzcker:这是split()
的一个非常随机的“功能”,我同意。
| t | e | s | t |
^ matches here ($ matches here)