在PHP中,有時我們需要進行模式匹配操作,找到符合指定規則的字符串或文件名。這時可以使用fnmatch函數,它可以與指定模式進行比較,返回是否匹配的結果。
一、fnmatch函數的基本用法
fnmatch函數可以接受3個參數:模式字符串pattern、被比較的字符串string和一個可選的標識符flags。
其中pattern參數是需要匹配的模式字符串,其規則如下:
- *:匹配任意數量的字符,包括0個字符
- ?:匹配一個字符
- [ ]:匹配括號中列舉的任意一個字符,注意不是整個括號表達式
- [! ]:匹配不在括號中的任意一個字符
接下來,我們可以通過以下代碼來看一下fnmatch函數的基本用法:
$pattern = 'test_*_*.txt'; $string1 = 'test_abc_123.txt'; $string2 = 'test_abc.txt'; if (fnmatch($pattern, $string1)) { echo '$string1 matches pattern $pattern'; } else { echo '$string1 does not match pattern $pattern'; } if (fnmatch($pattern, $string2)) { echo '$string2 matches pattern $pattern'; } else { echo '$string2 does not match pattern $pattern'; }
運行以上代碼,輸出結果為:
$string1 matches pattern $pattern $string2 does not match pattern $pattern
由此可見,$pattern模式字符串匹配$string1字符串成功,但是匹配$string2字符串失敗。
二、fnmatch函數的標識符
fnmatch函數還支持一些可選標識符flags,可以通過這些標識符改變默認的匹配行為。常用的標識符包括:
- FNM_NOESCAPE:禁止使用反斜杠來轉義特殊字符
- FNM_PATHNAME:模式中的*只匹配/之前的內容
- FNM_PERIOD:在匹配.開頭的文件名時,必須要顯式地指定
可以通過以下代碼來使用這些標識符:
$pattern = '*.txt'; $string1 = 'test.txt'; $string2 = 'dir/test.txt'; $string3 = './test.txt'; if (fnmatch($pattern, $string1, FNM_PERIOD)) { echo '$string1 matches pattern $pattern'; } else { echo '$string1 does not match pattern $pattern'; } if (fnmatch($pattern, $string2, FNM_PATHNAME)) { echo '$string2 matches pattern $pattern'; } else { echo '$string2 does not match pattern $pattern'; } if (fnmatch($pattern, $string3, FNM_NOESCAPE)) { echo '$string3 matches pattern $pattern'; } else { echo '$string3 does not match pattern $pattern'; }
運行以上代碼,輸出結果為:
$string1 matches pattern $pattern $string2 does not match pattern $pattern $string3 matches pattern $pattern
由此可見,在使用fnmatch函數時,我們可以根據需要選擇性地使用標識符來進行相關設置,提高代碼的靈活性。
三、fnmatch函數的實際應用
fnmatch函數的應用範圍比較廣泛,下列是一些常見的實際應用場景。
1、文件篩選
在進行文件操作時,往往需要先篩選出符合匹配規則的文件,再進行後續操作。例如,下面的代碼可以列出當前目錄中所有的PHP文件。
$files = glob("*.php"); foreach ($files as $filename) { if (fnmatch("*_bak.php", $filename)) { echo "Found backup of $filename"; } }
2、郵件地址驗證
在進行郵件地址驗證時,可以使用fnmatch函數對郵件地址進行主機部分的校驗。例如:
$email = "someone@example.com"; if (fnmatch("*@example.com", $email)) { echo "Valid email address: $email"; }
3、密碼強度校驗
在進行密碼強度校驗時,可以使用fnmatch函數檢查密碼是否包含不允許出現的字符。例如:
$password = "qwerty123$"; if (fnmatch("*[\^a-zA-Z0-9]*", $password)) { echo "Password contains non-allowed characters"; } else { echo "Password is valid"; }
四、總結
通過本文的闡述,我們了解了fnmatch函數在PHP中進行模式匹配的基本用法、常見標識符和實際應用場景,可以通過該函數輕鬆實現字符串和文件名的匹配等相關操作。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/197400.html