re = /^(?=\d+(?:\/\d+\/\d+)?$)(?:02\/?(?:[01]\d|2\d)\/?(?:19|20)(?:0[048]|[13579][26]|[2468][048])|(?:0[13578]|10|12)\/?(?:[0-2]\d|3[01])\/?(?:19|20)\d{2}|(?:0[469]|11)\/?(?:[0-2]\d|30)\/?(?:19|20)\d{2}|02\/?(?:[0-1]\d|2[0-8])\?(?:19|20)\d{2})$/m
str = '12/31/2000
12312000
12/31 000
12/31-000
1231/2000'
# 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