JavaRush /Java блог /Архив info.javarush /Регулярные выражения , помогите разобраться .
strEaM
25 уровень

Регулярные выражения , помогите разобраться .

Статья из группы Архив info.javarush
Пример : String s = "050123456"; хочу проверить строку по такому шаблону : s.matches("^(\\+\\d{2})?((\\(\\d{3}\\))?|\\d{3})[\\d]{6}"); Теперь разберем его по кусочкам, ^(\\+\\d{2})? - начало строки, комбинация "+" и две цифры "+38", могут быть 0 или 1 раз ((\\(\\d{3}\\))? - далее следует скобка"(" , три цифры, скобка ")" "(050)" , может быть 0 или 1 раз |\\d{3}) - или вместо скобок и трех цифр может быть просто три цифры "050", [\\d]{6} - далее последний кусочек, в котором начинается магия. Если в последнем квантификаторе написать {6} , для строки s, результат будет true. С этим понятно, насколько я понимаю именно так и должно быть. Но, если написать {9} результат тоже будет true. Для других цифр false. Как такое возможно, что для шести и девяти результат true. Итак, еще раз для наглядности : String s = "050123456"; s.matches("^(\\+\\d{2})?((\\(\\d{3}\\))?|\\d{3})[\\d]{6}"); \\true s.matches("^(\\+\\d{2})?((\\(\\d{3}\\))?|\\d{3})[\\d]{9}"); \\true s.matches("^(\\+\\d{2})?((\\(\\d{3}\\))?|\\d{3})[\\d]{7}"); \\false
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ