Ваш вопрос не компилируется. Вам нужно изменить его следующим образом
String text = "(000) 000-0000111";
String pattern2 = "[(][0-9][0-9][0-9][)]\\s[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]";
Pattern pattern_22 = Pattern.compile(pattern2);
Matcher matcher_22 = pattern_22.matcher(text);
if (matcher_22.find()) {
return matcher_22.group(0);
} else {
return "NONE";
}
В результате вы получите (000) 000-0000 по вашему запросу.
Тем не менее, ваше текущее регулярное выражение довольно многословно. Вы можете использовать что-то гораздо более простое, например
\(\d{3}\) \d{3}\-\d{4}
Отмечая, что в Java вы должны избегать обратной косой черты, поэтому в контексте вашего Java-кода это будет
\\(\\d{3}\\) \\d{3}\\-\\d{4}
Где \d
представляет собой цифру (0-9), а {n}
представляет группу n
, одну за другой.
Если, кроме этого, вы также хотите узнать, что было исключено из вашего ввода (как упоминалось в комментарии, вы хотите извлечь завершающие символы), вы можете использовать группы захвата в своем регулярном выражении, как, например,
(\(\d{3}\) \d{3}\-\d{4})(.*)
Там, где первая группа захвата, (\(\d{3}\) \d{3}\-\d{4})
выдаст вам шаблон, который вы хотите вывести, а вторая, (.*)
, даст вам все остальное, что появилось после. Это также должно быть экранировано от обратной косой черты, если используется в Java.
С
pattern2 = "(\\(\\d{3}\\) \\d{3}\\-\\d{4})(.*)";
Вы бы получили
String valid = matcher_22.group(1);
String rest = matcher_22.group(2);
, где valid
равно (000) 000-0000
, а rest
равно 111
.