A_Modestov
@A_Modestov

String#scan. Как составить регулярное выражение для поиска ip-адреса в строке?

Добрый день, господа. Наверняка кто то сталкивался, подскажите регулярное выражение для поиска ip адреса в строке.
str.scan(/.../).
Заранее благодарю.
  • Вопрос задан
  • 728 просмотров
Решения вопроса 2
mukizu
@mukizu
Ответ написан
Комментировать
vladchernik
@vladchernik
system analyst | developer
\b(?:\d{1,3}\.){3}\d{1,3}\b
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@ilyanetwork
Немного проиллюстрировал ответ от Vlad Chernik и добавил валидацию найденных адресов при помощи стандартной библиотеки ipaddr:

require 'ipaddr'

text = "Proxy IP Proxy Port Last Check Proxy 
Speed Proxy Country Anonymity 118.99.81.204118.99.81.204 8080 34 sec 
Indonesia - Tangerang Transparent 2.184.31.2 8080 58 sec Iran 
Transparent 93.126.11.189 8080 1 min Iran - 
Esfahan Transparent 202.118.236.130 7777 1 min 
China - Harbin Transparent 62.201.207.9 8080 1 min Iraq 
Transparent 219.143.244.170 8899 1 min China - 
Beijing Transparent 66.63.235.97 8080 1 
min United States - Somerville Transparent 27.191.194.106 8080 1 
min China Transparent 200.195.141.178 8080 2 min 
Brazil Transparent 210.101.131.232 8080 2 min 
South Korea - Seoul Transparent 218.75.205.44 9999 2 min 
China - Changsha Transparent212.119.97.198 3128 2 min Russia - Moscow 
Transparent 999.999.999.99 213.11.23.999 
Your public IP address is 41.110.14.41 - Learn more"

valid_ip = []

text.scan(/\b(?:\d{1,3}\.){3}\d{1,3}\b/).map do |ip|
    valid_ip << ip if !(IPAddr.new(ip) rescue nil).nil?
end

puts valid_ip

https://repl.it/CmQy

IPv4/IPv6 можно проверить через другую стандартную библиотеку Resolv:

require 'resolv'
 
str = "178.248.232.5"
 
case str
when Resolv::IPv4::Regex
  puts "It's a valid IPv4 address."
when Resolv::IPv6::Regex
  puts "It's a valid IPv6 address."
else
  puts "It's not a valid IP address."
end

https://repl.it/CmQz
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы