re = /^(?:(?:(jdbc)\:{1})?(?:(\w+):\/{2})?(?:([^@\/?!\"':#\s]+(?::\w+)?)@)?)?(?:([^@\/?!\"':#\s]+(?::\d+)?)(?=(?:$)|(?:\/)))?(?:\/([^@?!\"':#\s]*)(?=(?:$)|(?:\?)))?(?:[?]([^#?!\s]+))?\S*$/m
str = 'postgresql://
postgresql://localhost
postgresql://localhost:5432
postgresql://localhost/mydb
postgresql://user@localhost
postgresql://user:secret@localhost
postgresql://user:secret@localhost:1533
postgresql://user:secret@localhost:1533/
postgresql://user:secret@localhost:1533/db?
postgresql://user::se:::cret@localhost::port
postgresql://user::secret@local::host::po::::rt/dd::b:::b
postgresql://other@localhost/otherdb?connect_timeout=10&application_name=myapp
postgresql://localhost/mydb?user=other&password=secret
jdbc:postgresql://localhost
jdbc:postgresql://other@localhost/otherdb?connect_timeout=10&application_name=myapp
jdbc:postgresql://other@localhost:5432/otherdb?connect_timeout=10&application_name=myapp
jdbc:postgresql://other:pass@localhost:5432/otherdb?connect_timeout=10&application_name=myapp
jdbc:postgresql://other:pass@localhost:5432/other/db?connect_timeout=10&application_name=myapp
jdbc:postgresql://other:pass@localhost:5432/other/db??connect_timeout=10&application_name=myapp
jdbc:postgresql://other::pass@localhost::5432/oth:erdb?connect_timeout=10&application_name=myapp
""\'\'":::abc;
postgresql://127.0.0.1::5432
127.0.0.1::5432
localhost
user@localhost
user@localhost:1533
user@localhost:1533/db
user@localhost:1533/db?
user:secret@localhost
user:secret@localhost/db
user:secret@localhost/db?
user:secret@local:host/otherdb
user:secret@local:1533/othe1//db
user:secret@localhost/otherdb?connect_timeout=10&application_name=myapp
user:secret@localhost/other/db?connect_timeout=10&application_name=myapp
user:secret@localhost/other/db??connect_timeout=10&application_name=myapp
us""er:se::cret@loca\'\'lhost
user:secret@local:1533/otherdb
jdbc:postgresql://user:secret@localhost:1533/otherdb
jdbc:postgresql://user:secret@@localhost:1533/otherdb
jdbc:postgresql://user:secret@localhost:1533/otherdb?
jdbc:postgresql://:secret@localhost:1533/otherdb?
jdbc:postgresql://user:secret@:1533/otherdb?
jdbc:postgresql://user:secret@localhost:1533/@otherdb?
jdbc:postgresql://user:secret@localhost/otherdb?connect_timeout=10&application_name=myapp
jdbc:postgresql://user:secret@localhost:1533/otherdb?connect_timeout=10&application_name=myapp
jd\'\'bc:post""gresql://us..er:sec,,ret@localh++ost/ot+-herdb?connect_timeout=10&application_name=myapp'
subst = '$1 \\n$2 \\n$3 \\n$4 \\n$5 \\n---\\n'
result = str.gsub(re, subst)
# Print the result of the substitution
puts result
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