迁移新服务器后PHP使用match()函数出现语法错误,求解决方法
修复PHP语法错误:unexpected token ","
问题根源
你写的match('/[_-]([0-9]+)$/', $str, 1)是错误用法:PHP的match是条件分支表达式(PHP 8.0+引入),不是正则匹配函数,它的语法是match (表达式) { 分支 => 值, ... },你把它当成preg_match这类正则函数调用,导致语法解析失败,出现逗号相关的语法错误。
你的实际需求是从字符串末尾提取下划线/横杠后的数字ID,应该用正则匹配函数来实现。
修复方案
用preg_match替代错误的match调用,正确实现提取数字ID的逻辑:
// Given a string such as "comment_123" or "id_57", it returns the final, numeric id. function split_id($str) { if (preg_match('/[_-]([0-9]+)$/', $str, $matches)) { return $matches[1]; } // 可选:如果没有匹配到返回默认值,比如null或者原字符串 return null; }
说明
preg_match会执行正则匹配,将捕获到的分组内容存入$matches数组- 判断匹配是否成功,成功则返回第一个捕获分组(即末尾的数字ID)
- 增加了匹配失败的处理逻辑,避免无匹配时返回错误
额外注意
如果你的新服务器PHP版本低于8.0,即使match表达式用对了也会报错,但你的问题核心是误用了match的语法,所以优先用preg_match实现更兼容所有PHP版本。
内容的提问来源于stack exchange,提问作者Erisson J
相关产品推荐
相关产品推荐

