Сопоставление с шаблоном и получение нескольких значений из URL с использованием java - PullRequest
0 голосов
/ 07 мая 2020

Я использую Java -8, я хотел бы проверить, действителен ли URL-адрес на основе шаблона. Если это действительно так, я должен получить атрибуты bookId, authorId, category, mediaId

Pattern: <basepath>/books/<bookId>/author/<authorId>/<isbn>/<category>/mediaId/<filename>

И это образец URL

URL => https:/<baseurl>/v1/files/library/books/1234-4567/author/56784589/32475622347586/media/324785643257567/507f1f77bcf86cd799439011_400.png

Здесь Basepath - это /v1/files/library.

Я вижу некоторые совпадения с образцом, но я не мог соотноситься с моим вариантом использования, возможно, я не был хорош в reg-ex. Я также использую apache -common-utils, но я не уверен, как этого добиться.

Любая помощь или подсказка были бы действительно заметны.

1 Ответ

1 голос
/ 07 мая 2020

Попробуйте это решение (использует именованные группы захвата в регулярном выражении):

    public static void main(String[] args)
    {
        Pattern p = Pattern.compile("http[s]?:.+/books/(?<bookId>[^/]+)/author/(?<authorId>[^/]+)/(?<isbn>[^/]+)/media/(?<mediaId>[^/]+)/(?<filename>.+)");
        Matcher m = p.matcher("https:/<baseurl>/v1/files/library/books/1234-4567/author/56784589/32475622347586/media/324785643257567/507f1f77bcf86cd799439011_400.png");
        if (m.matches())
        {
            System.out.println("bookId = " + m.group("bookId"));
            System.out.println("authorId = " + m.group("authorId"));
            System.out.println("isbn = " + m.group("isbn"));
            System.out.println("mediaId = " + m.group("mediaId"));
            System.out.println("filename = " + m.group("filename"));
        }
    }

выводит:

bookId = 1234-4567
authorId = 56784589
isbn = 32475622347586
mediaId = 324785643257567
filename = 507f1f77bcf86cd799439011_400.png
...