(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)
fnmatch — Teste un nom de fichier au moyen d'un masque de recherche
fnmatch() vérifie si la chaîne filename
va passer le masque Shell pattern
.
pattern
Le pattern
à comparer. Habituellement, le pattern
contiendra des caractères génériques tels que '?'
et '*'
.
Caractère générique | Description |
---|---|
? | Le point d'interrogation correspondra à n'importe quel caractère unique. Par exemple, le motif "file?.txt" correspondra à "file1.txt" et "fileA.txt" , mais ne correspondra pas à "file10.txt" . |
* | L'astérisque correspondra à zéro ou plusieurs caractères. Par exemple, le motif "foo*.xml" correspondra à "foo.xml" et "foobar.xml" . |
[ ] | Les crochets sont utilisés pour créer des plages de points de code ASCII ou des ensembles de caractères. Par exemple, le motif "index.php[45]" correspondra à "index.php4" et "index.php5" , mais ne correspondra pas à "index.phpt" . Des plages bien connues sont [0-9] , [a-z] et [A-Z] . Plusieurs ensembles et plages peuvent être utilisés simultanément, par exemple [0-9a-zABC] . |
! | Le point d'exclamation est utilisé pour nier les caractères dans les crochets. Par exemple, "[!A-Z]*.html" correspondra à "demo.html" , mais ne correspondra pas à "Demo.html" . |
\ | Le backslash est utilisé pour échapper les caractères spéciaux. Par exemple, "Name\?" correspondra à "Name?" , mais ne correspondra pas à "Names" . |
filename
La chaîne testée. Cette fonction est particulièrement utile pour les noms de fichier, mais peut également être utilisée sur des chaînes régulières.
L'utilisateur moyen de Shell peut être familier avec les masques Shell, ou tout au moins, leurs expressions les plus simples, comme '?'
et '*'
. De cette façon, utiliser fnmatch() au lieu de preg_match() pour des recherches peut être plus pratique pour les non-initiés.
flags
La valeur de flags
peut être une combinaison des drapeaux suivants, joins avec l' opérateur binaire OR (|).
Flag | Description |
---|---|
FNM_NOESCAPE | Désactive l'échappement des antislashes. |
FNM_PATHNAME | Un slash dans une chaîne correspond uniquement à un slash dans le masque fourni. |
FNM_PERIOD | Un point en début de chaîne doit correspondre exactement à un point dans le masque fourni. |
FNM_CASEFOLD | Les correspondances ne tiennent pas compte de la casse. Fait parti de l'extension GNU. |
Exemple #1 Vérifier le nom d'une couleur avec un masque Shell
<?php
if (fnmatch("*gr[ae]y", $color)) {
echo "des formes de gris ...";
}
?>
Actuellement, cette fonction n'est pas disponible pour les systèmes non-POSIX, à l'exception de Windows.