ファイル名がパターンにマッチするか調べる

# fnmatch

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

fnmatch — ファイル名がパターンにマッチするか調べる

### 説明

function fnmatch(string `$pattern`, string `$filename`, int `$flags` = 0): bool

fnmatch()は`filename` で指定された文字列が `pattern` で指定されたシェルワイルドカードにマッチするかどうかチェックします。

### パラメータ

`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 (|) 演算子 で連結した任意の組み合わせです。

  fnmatch() で使えるフラグ
  `フラグ` | 説明
  --- | ---
  `FNM_NOESCAPE` | バックスラッシュのエスケープを無効にする。
  `FNM_PATHNAME` | 文字列内のスラッシュは、指定したパターン内のスラッシュにのみマッチする。
  `FNM_PERIOD` | 文字列の先頭のピリオドは、指定したパターン内のピリオドにマッチしなければならない。
  `FNM_CASEFOLD` | 大文字小文字を区別しないマッチ。GNU 拡張の一部。

### 戻り値

マッチした場合に `true`、それ以外の場合に `false` を返します。

### 例

例1 シェルのワイルドカードパターンによる色の名前のチェック

    <?php
    if (fnmatch("*gr[ae]y", $color)) {
      echo "some form of gray ...";
    }
    ?>

### 注意

警告

今のところ、この機能は POSIX に準拠していないシステムで利用できません (ただし、Windows では利用できます)。

### 参考

- glob() - パターンにマッチするパス名を探す
- preg_match() - 正規表現によるマッチングを行う
- sscanf() - フォーマット文字列に基づき入力を処理する
- printf() - フォーマット済みの文字列を出力する
- sprintf() - フォーマットされた文字列を返す

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open