re = /^(?:([[:xdigit:]]{2})([^[:xdigit:]]?)(?1)(\2(?1))(?3){3}|((?1){2})((?2))(?4)\5(?4))$/m
str = '# Common formats :
fc:92:3b:ed:cb:a9
fc-92-3b-ed-cb-a9
fc92.3bed.cba9
# Matching is case insensitive :
fC:92:3b:Ed:cB:a9
fC92.3bEd.cBa9
# Separator can be empty or any character execept hexadecimal ones :
fc 92 3b ed cb a9
fc92g3bedgcba9
fc923bedcba9
# Separators must be identicals, will not match otherwise :
fc:92:3b-ed:cb:a9
fc92.3bed;cba9'
# 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