使用PHP fnmatch進行文件名匹配
當我們需要通過文件名來進行匹配和搜索時,使用PHP內置的fnmatch函數非常實用。fnmatch函數會根據指定的模式來匹配文件名,并返回匹配結果。
下面是一個示例:
$files = array('example.jpg', 'example.doc', 'example.txt', 'config.ini'); foreach ($files as $file) { if (fnmatch('example.*', $file)) { echo $file . " matches pattern\n"; } else { echo $file . " does not match pattern\n"; } }
上述代碼中,我們定義了一個由4個文件名組成的數組$files,并通過foreach循環來遍歷該數組。在循環中,我們使用fnmatch函數來對每一個文件名進行匹配。在模式字符串中,使用*通配符表示匹配任意字符,所以example.*將匹配以example開頭,后面跟任意字符的文件名。
運行以上代碼,輸出結果如下:
example.jpg matches pattern example.doc matches pattern example.txt matches pattern config.ini does not match pattern
fnmatch函數除了支持*通配符之外,還支持其他一些通配符,如?
下面是一個使用?通配符的示例:
$files = array('example.xls', 'example.txt', 'example1.doc'); foreach ($files as $file) { if (fnmatch('example?.*', $file)) { echo $file . " matches pattern\n"; } else { echo $file . " does not match pattern\n"; } }
在以上代碼中,我們將example?.*作為模式字符串,它表示匹配以example開頭,后面只有一個字符,后面可以是任意字符的文件名。運行以上代碼,輸出結果如下:
example.xls matches pattern example.txt matches pattern example1.doc does not match pattern
我們也可以使用方括號來指定匹配字符的范圍。如[a-z]表示匹配任何一個小寫字母。下面是一個使用方括號的模式字符串示例:
$files = array('example.doc', 'example.txt', 'test.doc'); foreach ($files as $file) { if (fnmatch('[a-z]*.doc', $file)) { echo $file . " matches pattern\n"; } else { echo $file . " does not match pattern\n"; } }
以上代碼中,我們指定了一個[a-z]*.doc的模式字符串,它表示以小寫字母開頭,后面跟任意字符,最后以.doc結尾的文件名。運行以上代碼,輸出結果如下:
example.doc matches pattern test.doc matches pattern example.txt does not match pattern
除了以上的通配符之外,fnmatch函數還支持其他一些相關的函數。比如fnmatch_case和fnmatch_flags。fnmatch_case函數表示是否區分大小寫,而fnmatch_flags表示使用哪些匹配選項。
總之,PHP的fnmatch函數是一個非常實用的函數,它能夠幫助我們快速地進行文件名匹配和搜索,方便了我們的編程工作。
上一篇php focus
下一篇ajax 異步sync