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

PHP preg_match使用正则时报错Unknown modifier '.' 无法匹配内容

PHP preg_match正则报错Unknown modifier '.'问题分析与解决

问题产生原因

PHP的PCRE正则函数要求所有正则表达式必须包裹在定界符中,通常使用/作为默认定界符,也可使用#、~等非字母数字、非反斜杠的特殊符号作为定界符。
你提交的代码中没有给正则加定界符,PHP会自动将正则开头的(识别为定界符,认为正则主体到配对的)就结束,也就是把(?<=page=)里的?<=page=当成正则主体,后面的.就被误判为正则修饰符,而.不属于PHP支持的合法正则修饰符,因此抛出该警告,同时匹配逻辑无法正常执行。

解决方法

给正则表达式加上合法定界符即可,以下两种写法都可正常运行:

  • 写法1:使用常用的/作为定界符
preg_match('/(?<=page=).*(?=&)/', 'page=123&test=ok', $matches);
print_r($matches);
// 输出匹配结果:Array ( [0] => 123 )
  • 写法2:如果正则内包含大量/不想转义,也可以用其他特殊符号作为定界符,比如~:
preg_match('~(?<=page=).*(?=&)~', 'page=123&test=ok', $matches);

可选优化

可以将正则中的.*替换为非贪婪匹配的.*?,避免字符串中存在多个&时匹配范围超出预期,优化后的正则为/(?<=page=).*?(?=&)/。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:39:04