(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)
fnmatch — ファイル名がパターンにマッチするか調べる
fnmatch()はfilename
で指定された文字列が
pattern
で指定されたシェルワイルドカードにマッチするかどうかチェックします。
pattern
マッチさせるパターン。
通常、pattern
には
'?'
や '*'
のようなワイルドカードを含めます。
ワイルドカード | 説明 |
---|---|
?
|
クエスチョンマークは、1文字にマッチします。
たとえば、
"file?.txt" は "file1.txt"
や "fileA.txt" にはマッチしますが、
"file10.txt" にはマッチしません。
|
*
|
アスタリスクは、0文字以上の文字にマッチします。
たとえば、
"foo*.xml" は
"foo.xml" や
"foobar.xml" にマッチします。
|
[ ]
|
角括弧は、アスキー文字のコードポイントや、
文字の集合を表すのに使います。
たとえば、"index.php[45]"
は "index.php4" や
"index.php5" にマッチしますが、
"index.phpt" にはマッチしません。
よく知られている文字の範囲として
[0-9] , [a-z] ,
[A-Z] が挙げられます。
複数の集合や範囲は、同時に使うことができます。
たとえば [0-9a-zABC] のように使えます。
|
!
|
エクスクラメーションマークは、
角括弧内の文字を否定するのに使います。
たとえば、"[!A-Z]*.html" は
"demo.html" にマッチしますが、
"Demo.html" にはマッチしません。
|
\
|
バックスラッシュは、特別な文字をエスケープするのに使います。
たとえば、"Name\?" は
"Name?" にマッチしますが、
"Names" にはマッチしません。
|
filename
調べたい文字列。この機能は特にファイル名のマッチに便利ですが、 通常の文字列に関しても使用できます。
一般的なユーザーにとって、シェルパターンやあるいは少なくとも
'?'
と'*'
によるワイルドカードのほうが
慣れていると思われます。そのため、
preg_match()
の代わりに fnmatch()
をフロントエンドの検索表現として使うことは、
プログラマではないユーザーにとってより便利でしょう。
flags
flags
の値は、以下のフラグを
論理 OR (|) 演算子
で連結した任意の組み合わせです。
フラグ |
説明 |
---|---|
FNM_NOESCAPE |
バックスラッシュのエスケープを無効にする。 |
FNM_PATHNAME |
文字列内のスラッシュは、指定したパターン内のスラッシュにのみマッチする。 |
FNM_PERIOD |
文字列の先頭のピリオドは、指定したパターン内のピリオドにマッチしなければならない。 |
FNM_CASEFOLD |
大文字小文字を区別しないマッチ。GNU 拡張の一部。 |
例1 シェルのワイルドカードパターンによる色の名前のチェック
<?php
if (fnmatch("*gr[ae]y", $color)) {
echo "some form of gray ...";
}
?>
今のところ、この機能は POSIX に準拠していないシステムで利用できません (ただし、Windows では利用できます)。