2016-12-06 6 views
1

Мне нужно выполнить примитивное сопоставление url в java. Мне нужен метод, который возвращает истину, говоряJava-метод проверки соответствия URL-адреса шаблону

/users/5/roles 

матчи

/users/*/roles 

Вот что я ищу и что я пытался.

public Boolean fitsTemplate(String path, String template) { 
    Boolean matches = false; 
    //My broken code, since it returns false and I need true 
    matches = path.matches(template); 
    return matches; 
} 
+0

Похоже, вы можете захотеть муравьиного муравья; для этого есть библиотеки. – chrylis

+0

Что должно быть возвращено для 'users/5/6/7/role'? [String.matches()] (http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#matches (java.lang.String)) принимает регулярное выражение '/ пользователи/[0-9] +/role' должны работать. –

+0

@JohnBupit false – JellyRaptor

ответ

1

Одним из вариантов является замена * с какой-то регулярное выражение эквивалентом, как [^/]+, но вид шаблона используется здесь на самом деле называется «Глоб» узор. Начиная с Java 7, вы можете использовать FileSystem.getPathMatcher для соответствия путям файлов с шаблонами glob. Полное описание синтаксиса glob приведено в документации для getPathMatcher.

public boolean fitsTemplate(String path, String template) { 
    return FileSystems.getDefault() 
         .getPathMatcher("glob:" + template) 
         .matches(Paths.get(path)); 
} 
+0

Да, это прекрасно. Я помню термин «глобус» в отношении соответствия URL/пути от моего воздействия на Javascript-задач, таких как Gulp. Он постоянно использует глобусы, чтобы сообщить шаблон, который будет соответствовать. – JellyRaptor