用preg_match匹配末尾点号后非斜杠字符可精准提取扩展名:正则'/.(1+)$/'捕获最后一个点后的纯扩展名,匹配成功才取$matches[1],避免误伤带点目录名或无扩展名情况。.\/ ↩

从PHP文件路径字符串中精准提取扩展名,避免被点号分割逻辑误伤带点的目录名或无扩展名情况。
用preg_match匹配末尾点号后非斜杠字符
第一步:调用preg_match,正则写成'/\.([^.\/]+)$/',目标字符串为$file_path。
第二步:检查返回值是否为1,只有匹配成功才继续处理,否则扩展名为空字符串。
第三步:从$matches[1]中取结果,这是括号捕获的纯扩展名(不含点)。这个正则确保只匹配最后一个点后的连续非点非斜杠字符,【不会把/home/user/file.name.php里的name误认为扩展名】。
立即学习“PHP免费学习笔记(深入)”;
用preg_match配合PREG_OFFSET_CAPTURE获取位置信息
方法一:传入PREG_OFFSET_CAPTURE标志,得到带偏移量的二维数组,再用substr截取点号之后到字符串末尾的内容,最后用pathinfo($ext, PATHINFO_FILENAME)去除非字母数字下划线的非法字符——这一步其实多余,直接用第一种方法更干净。
方法二:直接用'/(?【低版本会静默失败】。
封装成单行可复用函数
定义function getExtension($path) { return preg_match('/\.([^.\/]+)$/', $path, $m) ? $m[1] : ''; }。
这行代码覆盖了绝大多数场景:/var/log/nginx.access.log → 'log',index.php → 'php',file.tar.gz → 'gz',/tmp/.gitignore → 'gitignore',/noext → ''。



















