You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP升级至5.4后preg_match报Unknown modifier '('错误的解决方法

修复preg_match()的「Unknown modifier '('」警告

这个警告的问题很明确——你的正则表达式分隔符使用出错了,跟PHP版本升级到5.4的关联其实不大,只是新版本的语法检查更严格,让之前潜在的问题显现出来了。

错误原因

你用了/作为正则表达式的分隔符,但正则内容里的Mozilla/包含了一个未转义的/。PHP会把第一个/看作正则的起始分隔符,紧接着的(就被当成了正则修饰符(比如i、m这类合法修饰符),但(根本不是合法的修饰符,所以就抛出了这个警告。

两种修复方案

方案1:转义正则中的斜杠

把正则里的/转义成\/,让PHP把它当作普通字符处理:

preg_match( '/Mozilla\/([0-9].[0-9]{1,2})/', $_SERVER['HTTP_USER_AGENT'], $log_version);

方案2:更换分隔符(更推荐)

换一个不会和正则内容冲突的分隔符,比如#或者~,这样就不用转义斜杠了,代码可读性更高:

// 使用#作为分隔符
preg_match( '#Mozilla/([0-9].[0-9]{1,2})#', $_SERVER['HTTP_USER_AGENT'], $log_version);

// 或者使用~作为分隔符
preg_match( '~Mozilla/([0-9].[0-9]{1,2})~', $_SERVER['HTTP_USER_AGENT'], $log_version);

额外建议

顺便提一句:$HTTP_USER_AGENT是PHP的旧版超全局变量写法,在PHP 5.4及以后,register_globals默认是关闭的,这个变量可能无法正常获取值。推荐使用标准的超全局数组$_SERVER['HTTP_USER_AGENT']来获取用户代理信息,兼容性和安全性更好。

内容的提问来源于stack exchange,提问作者Uttam Panara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:57:11