java - 无法使 Negative Lookahead 正则表达式正确匹配

标签 java regex regex-negation regex-lookarounds

我正在尝试匹配 Java 中没有 .jsp/.jspx 扩展名的字符串,并且在负向先行模式方面遇到了很多困难。

给定一堆字符串:

String string1 = "templateName";
String string2 = "some/path"
String string3 = "basic/filename/no/extension"
String string4 = "some/path/to/file.jsp"
String string5 = "alternative/path/to/file.jspx"

我试图找到一个匹配前 3 个而不是后 2 个的正则表达式。

我本以为带有负向预测的正则表达式会起作用。

例如:

Pattern p = new Pattern.compile( "(.+)(?!\\.jsp[x]?)")

但是该模式似乎与上述所有字符串相匹配。我最初认为第 1 组可能太贪婪,所以我尝试了 (.+?),但这也没有帮助。

这个SO Post很好地解释了否定前瞻,但不幸的是它并没有帮助我找到正确的组合。

我是否遗漏了一些明显的东西?

最佳答案

您可以使用负向回顾:

Pattern p = new Pattern.compile( "^(.+)(?<!\\.jspx?)$" );

或者您可以使用否定前瞻:

Pattern p = new Pattern.compile( "^(?!.+?\\.jspx?$)(.+)$" );

关于java - 无法使 Negative Lookahead 正则表达式正确匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19643239/

相关文章:

java - Hibernate 元数据的唯一性

java - 使用Lombok,方法无法解析

java - onApplicationEnd - CF 实际上正在关闭吗?

javascript - 正则表达式第一部分以数字开头

javascript - 为什么我在测试正则表达式时会出错?

java - 用于查找字符串的正则表达式模式包含一些单词并且不包含其他单词

java - 短路运算符是否过载?

java - 如何从 Windows 命令行中的类路径中排除特定的 jar 文件?

java - 用于查找 HTML 标记及其内容的正则表达式的否定 - java

python - 用于提取网络链接的带有否定的正则表达式