Задание:Написать регулярное выражение, определяющее является ли данная строка GUID с или без скобок. Где GUID это строчка, состоящая из 8, 4, 4, 4, 12 шестнадцатеричных цифр разделенных тире.
– пример правильных выражений: e02fd0e4-00fd-090A-ca30-0d00a0038ba0. – пример неправильных выражений: e02fd0e400fd090Aca300d00a0038ba.
Решение:
public static boolean second(String testString)
{
Pattern p = Pattern.compile("^[{]?\\w{8}-\\w{4}-\\w{4}-\\w{12}[}]?$");
Matcher m = p.matcher(testString);
return m.matches();
}
Понимаю, что ошибка в шаблоне, но не понимаю почему?
Вы пропустили одну группу из 4 символов. Вот исправленный вариант.
Pattern p = Pattern.compile("^\\{?\\p{XDigit}{8}-\\p{XDigit}{4}-\\p{XDigit}{4}-\\p{XDigit}{4}-\\p{XDigit}{12}}?$");
Вот мой вариант
Pattern p = Pattern.compile("^\\{?\\p{XDigit}{8}-(?:\\p{XDigit}{4}-){3}\\p{XDigit}{12}}?$");
Вы так же может отлаживать свои выражения на regex101.com. Там это очень удобно делать.
Как вариант:
Pattern p = Pattern.compile(@"^[{(]?[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}[)}]?$");
Почему вместо конструкции 0-9a-fA-F
не использую \w
?
Согласно документации для спец. символа \w
используется такое объявление [a-zA-Z_0-9]
, а GUID исключает знак нижнего подчеркивания.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Одно из условий задачи: В классе Cat добавь public статическую переменную cats (ArrayList<Cat>)Я это понимаю вот так:
Здравствуйте, что только не делал, не получаетьсяНужно открывать новый экран, при нажатии на ListView