0

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"

最後の2つではなく最初の3つに一致する正規表現を見つけようとしています。

否定的な先読みを持つ正規表現が機能すると思っていたでしょう。

元:

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

しかし、そのパターンは上記のすべての文字列に一致するようです。最初は、グループ 1 は貪欲すぎるのではないかと思ったので、(.+?) を試してみましたが、どちらも役に立ちません。

This SO Postは否定的な先読みを説明するのに非常に良い仕事をしていますが、残念ながら正しい組み合わせを見つけるのに役立っていません.

明らかな何かが欠けていますか?

4

2 に答える 2

2

次のように使用できますnegative lookbehind

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

または、次のように使用できますnegative lookahead

Pattern p = new Pattern.compile( "^(?!.+?\\.jspx?$)(.+)$" );
于 2013-10-28T19:20:16.000 に答える
1

別の否定的な後読みを次に示します。

Pattern p = new Pattern.compile(".*(?<!.jspx?)$");

(?<!.jspx?)否定後読みアサーションです。つまり、文字列の末尾の前に .jsp または .jspx がないことを意味します。

あなたは文字列 $ の終わりの後ろを見ています

参照:

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

で終わらない正規表現

于 2013-10-29T05:45:17.147 に答える