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

如何用preg_match匹配字符串?匹配.msi/.php文件后缀失败求助

问题分析与修复方案

你的代码有两个关键问题导致匹配失败,我来一一拆解:

1. 正则表达式的单词边界\b使用错误

\b代表的是单词边界,只有当字符是单词字符(字母、数字、下划线)和非单词字符的分界处才会生效。比如install.msi里,msi前面是.(非单词字符),而install的最后一个字符l是单词字符,所以install和.之间是单词边界,但.和msi之间并不是单词边界——这就导致你的正则#\b(msi|php)\b#根本匹配不到后缀部分。

2. 代码语法错误

你的preg_match函数最后多了一个逗号:preg_match('#\b(msi|php)\b#', $uploaded_type,)),这个多余的逗号会直接导致PHP语法报错,即便正则没问题也无法正常执行。


修复后的代码

如果你的需求是匹配文件名末尾的.msi或.php后缀(也就是标准的文件后缀匹配),可以用下面的代码:

$uploaded_type = $_FILES['image']['name'];
// 匹配以.msi或.php结尾的文件名,i表示不区分大小写(可选)
if (preg_match('#\.(msi|php)$#i', $uploaded_type)) {
    echo $uploaded_type;
}

正则说明:

  • \.:匹配文件名里的点(.在正则里是特殊字符,必须转义)
  • (msi|php):匹配msi或php任意一个后缀
  • $:表示字符串的结尾,确保我们匹配的是最后一个点后面的后缀
  • i:可选修饰符,开启不区分大小写匹配(比如能匹配.MSI或.PhP)

如果你的需求是匹配文件名中任意位置的.msi或php后缀(比如abc.msi.def这种包含.msi的文件名),可以去掉$:

$uploaded_type = $_FILES['image']['name'];
if (preg_match('#\.(msi|php)#i', $uploaded_type)) {
    echo $uploaded_type;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:05:27