以下两行代码:
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
.有人能指出我的想法是错的吗?
(?!^)
匹配任何不在字符串开头的位置,就像(?<!^)
.由于 ^
锚没有任何长度,因此无论您是向前还是向后都无关紧要.
想象一下test
像这样的字符串,|
表示 字符之间的位置:
| t | e | s | t |
^ matches here ($ matches here)
Run Code Online (Sandbox Code Playgroud)
(?!^)
在位置上不匹配,0
因为当向前看0个字符时,正则表达式引擎从这里"看到"字符串的开头
(?<!^)
这里不匹配,因为当向后看0个字符时,正则表达式引擎从这里"看到"字符串的开头