函数名称:fnmatch()
适用版本:PHP 4, PHP 5, PHP 7
函数说明:fnmatch() 函数用于使用模式匹配来比较字符串。它类似于 Unix shell 的文件名匹配规则。
语法:bool fnmatch(string $pattern, string $string[, int $flags = 0])
参数:
- $pattern:要匹配的模式,可以包含通配符字符 *(匹配任何字符序列)和 ?(匹配任何单个字符)。
- $string:要与模式进行比较的字符串。
- $flags(可选):可以是以下常量的组合:
- FNM_NOESCAPE:禁用反斜杠转义。
- FNM_PATHNAME:要求模式匹配整个路径。
- FNM_PERIOD:在模式的开头必须出现句点才能匹配。
返回值:如果 $string 匹配 $pattern,则返回 true,否则返回 false。
示例1:
$pattern = "*.txt"; // 匹配以 .txt 结尾的文件名
$string = "file.txt";
if (fnmatch($pattern, $string)) {
echo "匹配成功";
} else {
echo "匹配失败";
}
输出:
匹配成功
示例2:
$pattern = "image*.jpg"; // 匹配以 image 开头,以 .jpg 结尾的文件名
$string = "image123.jpg";
if (fnmatch($pattern, $string)) {
echo "匹配成功";
} else {
echo "匹配失败";
}
输出:
匹配成功
注意事项:
- fnmatch() 函数区分大小写,如果需要进行大小写不敏感的匹配,可以使用 strcasecmp() 函数进行比较。
- $pattern 中的通配符字符 * 和 ? 可以出现在任何位置,也可以使用多个。例如,"*.txt" 匹配以 .txt 结尾的文件名,"file?.txt" 匹配类似 "file1.txt"、"fileA.txt" 的文件名。
- $flags 参数可以控制模式匹配的一些行为,例如是否需要整个路径匹配、是否需要以句点开头等。
- fnmatch() 函数在匹配过程中会自动处理反斜杠转义,如果不需要转义,可以使用 FNM_NOESCAPE 标志禁用转义。