preg_match("#Safari(\s+|/\s*)([^)(;]+)#i", $_SERVER['HTTP_USER_AGENT'], $results);
i
в конце означает «без учета регистра», что соответствует первому критерию.
(\s+|\s*/\s*)?
соответствует как минимум одному пробелу или косой черте, перед которыми следует произвольное числоиз пробельных символов (от нуля до бесконечности и далее), что касается критериев два.
[^)(;]+
будет соответствовать как можно большему числу символов, которые не внутри набора, который обращается к критериям три.