下面两行代码:
System.out.println(Arrays.toString("test".split("(?<!^)")));
System.out.println(Arrays.toString("test".split("(?!^)")));
每个产生相同的输出:
[t, e, s, t]
我预计底线会产生
[, t, e, s, t]
因为它应该愿意在 ^
之后和 t
之前拆分。有人可以指出我的想法错在哪里吗?
最佳答案
(?!^)
匹配任何不在字符串开头的位置,就像 (?<!^)
.自 ^
anchor 没有任何长度,无论你向前看还是向后看都无关紧要。
想象一下字符串 test
像这样 |
表示字符之间的位置:
| t | e | s | t |
^ matches here ($ matches here)
(?!^)
在位置 0
不匹配因为当向前看 0 个字符时,正则表达式引擎从这里“看到”字符串的开头
(?<!^)
这里也不匹配,因为正则表达式引擎在向后看 0 个字符时从这里“看到”字符串的开头
关于java - 为什么拆分 `(?!^)` 和 `(?<!^)` 会产生相同的答案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19503836/