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

标签 java regex

下面两行代码:

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 - 为什么拆分 `(?!^)` 和 `(?&lt;!^)` 会产生相同的答案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19503836/

相关文章:

regex - 从分页 URL 中删除 "page"

java - 从 javascript 转义 Unicode 到 Java Unicode 的转换

java - Spring:附件的 MimeMessageHelper 编码

java - 如何将 JUnit TemporaryFolder @Rule 与 Spring @Value 属性一起使用?

java - 为什么我得到 : java. lang.UnsatisfiedLinkError

python re.sub - 替代替换模式

javascript - 如何使用 jQuery 在输入中用逗号替换换行符?

java - 来自 tomcat 的 NoClassDefFoundError。我的 pom 有问题吗?

Python 正则表达式 : Match ALL consecutive capitalized words

python - 正则表达式提取嵌套模式