re = /(PostgreSQL (?P<psql_major>\d{1,2})\.(?P<psql_minor>\d{1,2})(?P<psql_opt_patch>\.\d{1,2})?, )?Aurora PostgreSQL release (?P<aurora_psql_major>\d{1,2})\.(?P<aurora_psql_minor>\d{1,2})(?P<aurora_psql_opt_patch>\.\d{1,2})?(?P<release_or_deprecation>\,\s(?P<release_data>.*)|\s\(Deprecated on (?P<deprecation_date>.*)\))?/m
str = 'PostgreSQL 12.6, Aurora PostgreSQL release 4.1 (Deprecated on July 15, 2022)
PostgreSQL 12.4, Aurora PostgreSQL release 4.0 (Deprecated on July 15, 2022)
Aurora PostgreSQL release 14.3.1, July 6, 2022
PostgreSQL 9.6.8, Aurora PostgreSQL release 1.2 (Deprecated on October 28, 2021)
PostgreSQL 9.6.8, Aurora PostgreSQL release 1.2.4
PostgreSQL 14.5, Aurora PostgreSQL release 1.2
Aurora PostgreSQL release 14.3.1, Deprecated on October 28, 2021)'
# 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