在Java应用程序中,我需要编写一个包含URI的正则表达式的String
,以便URI不包含.js?
,.css?
和{{1}等字符序列},但也不是以.jpg?
,.js
和.css
我做了以下事情:
.jpg
它基本上匹配以给定文件扩展名结尾或包含文件扩展名加上问号的所有URI。
我如何否定以前的条件?
所以,例如,我希望以下URI匹配
(?:.js|.css|.jpg)$|(?:.js[?]|.html[?]|.jpg[?])
但以下两者都不会
"/a/fancy/uri/.js/which/is/valid"
答案 0 :(得分:4)
在负面展望中使用两个替换:
^(?!.*\.(js|css|jpg)($|\?)).*
此正则表达式匹配有效输入。在java中:
if (url.matches("^(?!.*\\.(js|css|jpg)($|\\?)).*")
// url is OK
如果您想匹配无效的输入,请使用正面的预测:
if (url.matches("^(?=.*\\.(js|css|jpg)($|\\?)).*")
// url is not OK
答案 1 :(得分:1)
如果您尝试匹配无效网址,则应执行以下操作:
String regex = ".*\\.(js|css|jpg)($|\\?.*)";
System.out.println("/a/fancy/uri/which/is/invalid.js?ver=1".matches(regex));
System.out.println("/a/fancy/uri/which/is/invalid.js".matches(regex));
System.out.println("/a/fancy/uri/.js/which/is/valid".matches(regex));
输出:
true
true
false