Я пытаюсь сопоставить определенную часть URI только тогда, когда за ней ничего не следует, или когда за ней следует '?'.
.../survey?expand=all //should match
.../survey //should match
.../survey/.. //should not match
Я не мог найти способ сделать это в одном паттерне. Я пытался (?=.*survey(?!\\?))
и не работал. Я также не мог найти способ сделать это в двух отдельных шаблонах. Например, я хочу соответствовать .../survey
, а не .../survey/...
, но это .*?/survey\\b
не сработало для меня.
Мой парсер:
public class UriParser {
private static String reqUriPath = null;
private static String pattern = null;
public static Boolean isURIMatching(Object routePattern, String pattern){
reqUriPath = routePattern.toString();
return checkPattern(reqUriPath, pattern);
}
private static Boolean checkPattern(String reqUriPath, String pattern) {
Pattern p = Pattern.compile(pattern,Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(reqUriPath);
return m.find();
}
}