我正在尝试匹配 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/