Регулярные выражения для телефонов

Pattern p= Pattern.compile("^((8|\\+7)[\\- ]?)?(\\(?\\d{3}\\)?[\\- ]?)?[\\d\\- ]{7,10}$");
        String text="+7 928 906 37 07";
        Matcher matcher1 = p.matcher(text);
        System.out.println(matcher1.matches());

Сделал программу для определения номера в строке. Примеры записи номеров, которые находит эта программа: +79043781661, +7 904 378 1661 ,+7 904 378 16 61, +7-904-378-16-61, +7(904)3781661 ,+7(904) 378-16 61, 89043781661 , 8 904 378-16-61 Хочу сделать еще программу для нахождения таких номеров в каком-то тексте. Но не имею понятия, как это сделать


Ответы (1 шт):

Автор решения: gil9red

Нужно:

  • Убрать границы ^ и $ в шаблоне регулярки
  • Использовать .find() с .group() для поиска всех совпадений

Пример:

String text = "Сделал программу для определения номера в строке. Примеры записи номеров, которые находит эта программа: +79043781661, +7 904 378 1661 ,+7 904 378 16 61, +7-904-378-16-61, +7(904)3781661 ,+7(904) 378-16 61, 89043781661 , 8 904 378-16-61 Хочу сделать еще программу для нахождения таких номеров в каком-то тексте. Но не имею понятия, как это сделать";
Pattern p = Pattern.compile("((8|\\+7)[\\- ]?)?(\\(?\\d{3}\\)?[\\- ]?)?[\\d\\- ]{7,10}");
Matcher m = p.matcher(text);
while (m.find()) {
    System.out.println(m.group());
}

Результат:

+79043781661
+7 904 378 1661 
+7 904 378 16 61
+7-904-378-16-61
+7(904)3781661 
...
→ Ссылка