正则表达式:在什么情况下`/(?!^)/`的结果与`//`不同?

时间:2015-10-31 04:01:34

标签: java regex

显然,Java中的split函数已从Java 7更改为Java 8。 (更多信息: Why in Java 8 split sometimes removes empty strings at start of result array?

有些人建议使用split("?!^")而不是split("")(在Java 7中)。

我的主要问题是如何解释/(?!^)/?是否有任何与//不同的情况?

1 个答案:

答案 0 :(得分:3)

首先,建议的正则表达式为split("(?!^)")(与您发布的无效正则表达式相对)。 (?!^)是一个negative lookahead,可以匹配^以外的任何地方(字符串的开头)。

正如您已经提到的,split()split("(?!^)")的行为在Java 8中发生了变化,而开头的零宽度匹配却从未产生这样的空前导子串。

因此,如果使用{{1}},您将获得与Java版本无关的相同行为。