浏览器版本匹配 - PHP 5.1.6中的正则表达式中断

时间:2013-02-14 14:28:54

标签: php regex preg-match-all

我正在使用脚本检测get_browserphp.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正常工作?

1 个答案:

答案 0 :(得分:4)

在PHP 5.2.2之前,不会引入您尝试使用的语法。 (?<name>pattern)。您应该可以使用此(?P<name>pattern)