import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "((\\+?\\d{1,3}[\\d{2,}\\.\\- \\(\\)]{11,}))|(\\+?[\\d]{10,})";
final String string = "Приветствую!\n"
+ "Можете помочь составить регулярное выражение чтобы вырезать номера телефонов из текста?\n"
+ "Для чего это нужно?\n"
+ "Для вырезки из текста +22 (999) 555-66-29 формы сообщения - телефонов спамеров.\n\n"
+ "Вариантов написания телефонов достаточно много.\n"
+ "Как учесть все варианты я не понимаю.\n"
+ "Телефоны имеют разное количество цифр: 10, 11, 12.\n"
+ "Разное написание:\n"
+ "+7 999 999 99 99\n"
+ "7 999 999 99 99\n"
+ "+7999 999 99 99\n"
+ "7999 999 99 99\n"
+ "+7999-999-99-99\n"
+ "7999-999-99-99\n"
+ "+7999-999-9999\n"
+ "7999-999-9999\n"
+ "+7999-9999999\n"
+ "7999-9999999\n"
+ "+79999999999\n"
+ "79999999999\n"
+ "+7.999.999.99.99\n"
+ "+7(999) 999-99-99\n"
+ "+123 (999) 555-66-29\n"
+ "и вместо цифры страны с оной цифрой 7, есть коды по 2 и по 3 цифры.\n"
+ "Можно придумать и ещё много вариантов написания номера телефона.\n"
+ "Как это всё учесть в выражении?\n"
+ "В тексте могут содержаться ссылки +555 (999) 555-66-29 на фотографии и ссылки на страницы сайта, в которых могут быть цифры. Как не зацепить цифры в ссылках? Как их отсортировать от номеров телефонов?\n"
+ "Можете помочь?";
final String subst = "убито ";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
// The substituted value will be contained in the result variable
final String result = matcher.replaceAll(subst);
System.out.println("Substitution result: " + result);
}
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Java, please visit: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html