Как сопоставить два выражения регулярных выражений? - PullRequest
0 голосов
/ 06 февраля 2019

Я должен проверить, верна ли эта строка.Так что я могу проверить UUID-части с этим выражением регулярного выражения

private String UUID = "([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})"

private String url = "customers/00000000-0000-0000-0000-000000000111/areas/00000000-0000-0000-0000-000000000222/orders/00000000-0000-0000-0000-000000000555/invoices/00000000-0000-0000-0000-000000000777/employees/2018-10-31T00:27:31.205+0000.jpg"

вот так

Pattern JPG_PATTERN = Pattern.compile(
            String.format("customers/%s/areas/%<s/orders/%<s/invoices/%<s/employees/", UUID));

Matcher m = JPG_PATTERN.matcher(url);

if (m.find()) {
System.out.println("found);
}

Но когда я добавлю еще одно регулярное выражение для проверки последней части строки.Это не работает.

private String EXTENSION = "(?:mov|jpg)";

 Pattern JPG_PATTERN = Pattern.compile(
                String.format("customers/%s/areas/%<s/orders/%<s/invoices/%<s/employees/%s", UUID, EXTENSION));

    Matcher m = JPG_PATTERN.matcher(url);

    if (m.find()) {
    System.out.println("found);
    }

Как можно использовать эти два отдельных выражения регулярного выражения и проверить, является ли строка действительной?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Ваше регулярное выражение не соответствует имени файла: 2018-10-31T00:27:31.205+0000.Измените регулярное выражение расширения на String EXTENSION = ".+(?:mov|jpg)";

И измените find на matches, в противном случае .jpg1 считается действительным.Вот полный код:

private static String UUID = "([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})";

private static String url = "customers/00000000-0000-0000-0000-000000000111/areas/00000000-0000-0000-0000-000000000222/orders/00000000-0000-0000-0000-000000000555/invoices/00000000-0000-0000-0000-000000000777/employees/2018-10-31T00:27:31.205+0000.jpg";

private static String EXTENSION = ".+(?:mov|jpg)";

public static void main(String[] args) {
    Pattern JPG_PATTERN = Pattern.compile(String.format("customers/%s/areas/%<s/orders/%<s/invoices/%<s/employees/%s", UUID, EXTENSION));

    Matcher m = JPG_PATTERN.matcher(url);

    if (m.matches()) {
        System.out.println("found");
    } else {
        System.out.println("not found");
    }

}
0 голосов
/ 06 февраля 2019

Вот исправленная версия вашего кода.Блокировщик, который я видел с твоей стороны, казалось, неправильно понимал, как работает String#format.Поскольку вы пытаетесь связать более одного заполнителя, я предлагаю просто использовать %s везде, а затем явно указывать каждую строку.Обратите внимание, что шаблон, который вы хотите использовать для конечного компонента пути для расширения, немного отличается от того, что вы предложили.

String UUID = "([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})";
String EXTENSION = ".*(?:mov|jpg)$";
String pattern = String.format("^customers/%s/areas/%s/orders/%s/invoices/%s/employees/%s", UUID, UUID, UUID, UUID, EXTENSION);
System.out.println(pattern);

^customers/([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})/areas/
    ([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})/orders/
    ([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})/invoices/
    ([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})/employees/.*(?:mov|jpg)$

Перейдите по ссылке ниже для демонстрации работающего регулярного выражения, которая показывает, что вышеуказанный шаблон соответствует вашемутестовый URL.

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...