Задание:Написать регулярное выражение, определяющее является ли данная строка 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 исключает знак нижнего подчеркивания.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости