我正在使用脚本检测get_browser上php.net页面上多次引用的浏览器及其版本。
包含脚本的文件保存为UTF-8,实际上它工作正常:
// relevant parts only where $ub stores the browser name like "Safari"
$userAgent = $_SERVER['HTTP_USER_AGENT'];
$known = array('Version', $ub, 'other');
$pattern = '#(?<browser>' . join('|', $known) . ')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#';
preg_match_all($pattern, $userAgent, $matches);
现在我们在使用PHP 5.1.6的服务器上运行一个站点。不幸的是,它打破了正则表达式并显示此警告:
PHP警告:preg_match_all()[function.preg-match-all]:编译失败:无法识别的字符(?&lt;在第48行的/file.php中的偏移3处
如何更新模式以使用PHP 5.1.6正常工作?
答案 0 :(得分:4)
在PHP 5.2.2之前,不会引入您尝试使用的语法。 (?<name>pattern)
。您应该可以使用此(?P<name>pattern)
。