re = /((\+|\d|\(|(<.*?>))[\d\-\(\)\. ]{9,}(\.|\n| |<\/.*>)(?!(png|jpg|<)))/im
str = 'Приветствую!
Можете помочь составить регулярное выражение чтобы вырезать номера телефонов из текста?
Для чего это нужно?
Для вырезки из текста формы сообщения - телефонов спамеров.
<p style="text-align: center;">(333) 4444 4444</p>
<span style="text-align: center;">1234567890</span>
<li style="text-align: center;">(999) 9 888 7777</li>
<p style="text-align: left;">12345 1234</p>
Вариантов написания телефонов +22 (999) 555-66-29 достаточно много.
Как учесть все варианты я не понимаю.
Телефоны имеют разное количество цифр: 10, 11, 12.
Разное написание:
+7 999 999 99 99
7 999 999 99 99
+7999 999 99 99
7999 999 99 99
+7999-999-99-99
+7 999 999 99 99
7999-999-99-99
+7999-999-9999
7999-999-9999
+7999-9999999
7999-9999999
+79999999999
79999999999
+7.999.999.99.99
+7(999) 999-99-99
+123 (999) 555-66-29
1_2017092902182426089.jpg
123451_2017092902182426089.png
6644123451_2017092902182426089.png
и вместо цифры страны с оной цифрой 7, есть коды по 2 и по 3 цифры. 7999659999999 jgjhgjkgjk
Можно придумать и ещё много вариантов написания номера телефона.
Как это +7.999.999.99.99 всё учесть в выражении?
В тексте могут содержаться ссылки +555 (999) 555-66-29 на фотографии и ссылки на страницы сайта, в которых могут быть цифры. Как не зацепить цифры в ссылках? Как их отсортировать от номеров телефонов?
Можете помочь?'
subst = '-kill-'
result = str.gsub(re, subst)
# Print the result of the substitution
puts 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 Ruby, please visit: http://ruby-doc.org/core-2.2.0/Regexp.html