]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»“”‘’]))#'; preg_match_all($urlpattern, $string, $matches); if(isset($matches[0]) && !empty($matches[0])) { foreach($matches[0] as $match) { $ret[md5($match)] = $match; } } return $ret; }