我想匹配在Java中沒有.jsp/.jspx擴展名的字符串,並且在負向預測模式中遇到很多困難。不能得到負面的Lookahead正則表達式正確匹配
給定一串字符串:
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]?)")
但是模式似乎符合上述所有字符串。我最初認爲第一組可能太貪婪,所以我嘗試過(。+?),但這也沒有幫助。
這個SO Post做了很好的解釋負面看法,但它不幫助我不幸找到正確的組合。
我錯過了一些明顯的東西嗎?
你的模式說,「如果你能找到不是緊跟着.jsp或.jspx後面的_any_非空字符序列,那麼它是匹配的。「所以當然它會匹配'some/path/to/file.jsp',因爲它可以匹配's','so'或任何其他東西,只要它不包含最後一個斜槓即可。見anubhava的答案。如果字符串的開頭後面跟着一個非空字符序列,後跟'.jsp [x]'(如果'.jsp [x]'在字符串的末尾,那麼第二個字符串使用負向前視)。 – ajb