【发布时间】:2013-10-28 19:16:08
【问题描述】:
我正在尝试匹配在 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 很好地解释了负前瞻,但不幸的是它并没有帮助我找到正确的组合。
我是否遗漏了一些明显的东西?
【问题讨论】:
-
你的模式说,“如果你能找到 any 非空的字符序列,并且没有紧跟 .jsp 或 .jspx,那么它就是匹配的。”所以它当然会匹配
some/path/to/file.jsp,因为它可以匹配s、so,或者只要它不包含最后一个斜线就可以了。见阿努巴瓦的回答。如果字符串的开头后跟一个非空字符序列,然后是.jsp[x](如果.jsp[x]在字符串的末尾),则第二个使用负前瞻失败。
标签: java regex regex-negation regex-lookarounds