2016-08-17 12 views
-2

を終了するか、含まない文字列を一致させるために、私はURIが.js?.css?.jpg?のような文字列が含まれていないように、URIの正規表現を含むStringを記述する必要はなく、ではありません基本的にはファイル拡張子プラスQUを特定のファイル拡張子で終わるか含むすべてのURIと一致し正規表現のJavaアプリケーションでは、ファイルの拡張子

(?:.js|.css|.jpg)$|(?:.js[?]|.html[?]|.jpg[?]) 

.js.css.jpg

で終わる私は次のように作られましたエステイオンマーク。

どのように私は以前の条件の否定を行うことができますか?

だから、例えば私は、次のURIが

"https://stackoverflow.com/a/fancy/uri/.js/which/is/valid" 

一致することを期待していますが、試合の無効なURLをしようとしている場合は、次の両方が

"https://stackoverflow.com/a/fancy/uri/which/is/invalid.js" 
"https://stackoverflow.com/a/fancy/uri/which/is/invalid.js?ver=1" 
+0

無効なURLまたは有効なURLと一致するようにしようとしています:

if (url.matches("^(?!.*\\.(js|css|jpg)($|\\?)).*") // url is OK 

あなたは無効入力を一致させたい場合は、先に正の外観を使用します。javaで? – shmosel

+1

URIクラスを使用してパスを抽出する必要があります。http://download.java.net/jdk7/archive/b123/docs/api/java/net/URI.html –

+1

@CasimiretHippolyteできません。受け入れられた答えに私のコメントを参照してください。プレースホルダをフィルタリングするためにSpringアノテーションで使用します。 –

答えて

4

利用先に負の表情で2つの交替:

^(?!.*\.(js|css|jpg)($|\?)).* 

この正規表現は有効入力に一致します。

if (url.matches("^(?=.*\\.(js|css|jpg)($|\\?)).*") 
    // url is not OK 
+1

パーフェクト! Spring Controllerでプレースホルダを使用する方法については、この[answer](http://stackoverflow.com/a/37578136/1983997)と組み合わせて使用​​しています。 –

1

が、これはそれを行う必要がありません。

String regex = ".*\\.(js|css|jpg)($|\\?.*)"; 
System.out.println("https://stackoverflow.com/a/fancy/uri/which/is/invalid.js?ver=1".matches(regex)); 
System.out.println("https://stackoverflow.com/a/fancy/uri/which/is/invalid.js".matches(regex)); 
System.out.println("https://stackoverflow.com/a/fancy/uri/.js/which/is/valid".matches(regex)); 

出力:

true 
true 
false 
+0

URLが有効な場合は一致させたいので、たとえば.cssで終わらないか、.cssが含まれていないとしますか? –

関連する問題