Пример :
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
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ