首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法获取负Lookahead regexp以正确匹配

无法获取负Lookahead regexp以正确匹配
EN

Stack Overflow用户
提问于 2013-10-29 03:16:08
回答 2查看 1.5K关注 0票数 0

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

给定一串字符串:

代码语言:javascript
复制
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个的正则表达式。

我本以为具有负向先行的正则表达式是可行的。

例如:

代码语言:javascript
复制
Pattern p = new Pattern.compile( "(.+)(?!\\.jsp[x]?)")

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

这个SO Post很好地解释了负向先行,但不幸的是它不能帮助我找到正确的组合。

我是不是漏掉了什么明显的东西?

EN

回答 2

Stack Overflow用户

发布于 2013-10-29 03:20:16

您可以将negative lookbehind用作:

代码语言:javascript
复制
Pattern p = new Pattern.compile( "^(.+)(?<!\\.jspx?)$" );

或者您可以像这样使用negative lookahead

代码语言:javascript
复制
Pattern p = new Pattern.compile( "^(?!.+?\\.jspx?$)(.+)$" );
票数 2
EN

Stack Overflow用户

发布于 2013-10-29 13:45:17

下面是另一个负面回顾:

代码语言:javascript
复制
Pattern p = new Pattern.compile(".*(?<!.jspx?)$");

(?<!.jspx?)是一个被取反的lookbehind断言,这意味着在字符串的末尾之前,没有.jsp或.jspx

您正在查看字符串$的末尾

参考资料:

http://www.regular-expressions.info/lookaround.html

Regex not ending with

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19643239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档