$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 = preg_replace($re, $subst, $str);
echo "The result of the substitution is ".$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 PHP, please visit: http://php.net/manual/en/ref.pcre.php