re = /(?<![\.\*\d])(?:(?P<a>2(?:5[0-5]|[0-4]\d)|1\d{2})|(?:0)?(?P<a>[1-9]\d)|(?:00)?(?P<a>\d)|(?P<a>\*))\.(?:(?P<b>2(?:5[0-5]|[0-4]\d)|1\d{2})|(?:0)?(?P<b>[1-9]\d)|(?:00)?(?P<b>\d)|(?P<b>\*))\.(?:(?P<c>2(?:5[0-5]|[0-4]\d)|1\d{2})|(?:0)?(?P<c>[1-9]\d)|(?:00)?(?P<c>\d)|(?P<c>\*))\.(?:(?P<d>2(?:5[0-5]|[0-4]\d)|1\d{2})|(?:0)?(?P<d>[1-9]\d)|(?:00)?(?P<d>\d)|(?P<d>\*))(?![\.\*\d])/
str = '*127.0.0.1 -> 127.0.0.1
192.168.0.1. -> 192.168.0.1
255.255.255.256 -> 255.255.255.255
192.168.**.* -> 192.168.*.*
255..1.15 -> 255.0.1.15
192.168.001.002 = 192.168.1.2
008.008.004.004 = 8.8.4.4'
# Print the match result
str.scan(re) do |match|
puts match.to_s
end
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