Регулярные выражения Java Regex

430
14 января 2017, 12:00

Задание:Написать регулярное выражение, определяющее является ли данная строка 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();
}

Понимаю, что ошибка в шаблоне, но не понимаю почему?

Answer 1

Вы пропустили одну группу из 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. Там это очень удобно делать.

Answer 2

Как вариант:

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 исключает знак нижнего подчеркивания.

READ ALSO
Что такое ArrayList<> в Java

Что такое ArrayList<> в Java

Одно из условий задачи: В классе Cat добавь public статическую переменную cats (ArrayList<Cat>)Я это понимаю вот так:

643
Открывать новый экран, при нажатии ListView

Открывать новый экран, при нажатии ListView

Здравствуйте, что только не делал, не получаетьсяНужно открывать новый экран, при нажатии на ListView

404