如何用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
相关产品推荐
相关产品推荐

