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

标签 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 中)。

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

最佳答案

首先,建议的正则表达式是 split("(?!^)") (而不是您发布的无效正则表达式)。 (?!^)negative lookahead匹配除 ^(字符串开头)之外的任何位置。

正如您已经提到的,split() 的行为在 Java 8 中发生了变化。 ,并且开头的零宽度匹配永远不会产生这样的空前导子字符串。

因此,如果您使用 split("(?!^)"),您将获得与 Java 版本无关的相同行为。

关于java - 正则表达式:在什么情况下 `/(?!^)/` 的结果会与 `//` 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33447920/

相关文章:

python - 为什么这个 Jinja nl2br 过滤器会转义 <br >'s but not <p>' s?

javascript - 特定格式的正则表达式(javascript)

java - JFrame 输出结果

java - Hibernate 标准,两个实体

mysql - 检查标签内是否存在逗号

javascript - 获取字符串中的中文标点符号

java - 在Android中加载XML资源

java - Clover - 在没有自动化测试的情况下获得覆盖

java - 如何将静态导入方法与 forEach 一起使用?

javascript - 匹配九个数字和最后一个大写字母的正则表达式