在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-hant/n/197400.html
微信掃一掃
支付寶掃一掃