グロブ

グロブ:ファイル名のパターンマッチングを可能にするワイルドカード機能



グロブとは、Unix系OSで主に使用されるワイルドカード機能です。特定のパターンに一致する複数のファイル名を一度に指定する際に用いられ、ファイル操作を効率化します。例えば、`.txt` は、現在のディレクトリにある全ての`.txt`拡張子のファイルを意味します。この``がグロブにおけるワイルドカードの一つであり、任意の文字列にマッチします。他に`?`は任意の一文字にマッチするワイルドカードとして知られています。

グロブの起源



グロブの起源はUNIX初期のバージョン(1969年から1975年)まで遡ります。当時、コマンドインタプリタは`/etc/glob`という独立したプログラムを用いてワイルドカードの展開を行っていました。これは、グローバルコマンドの略語で、後に`glob`というライブラリ関数として提供され、現在では多くのシェルやプログラムで利用されています。

グロブの構文



最も基本的なワイルドカードは``、`?`、`[...]`です。``は任意の文字列、`?`は任意の一文字にマッチします。`[...]`内にはマッチさせたい文字列を指定でき、`[^...]`とすれば指定した文字列以外の文字にマッチします。どのワイルドカードもパス区切り文字(Unixでは`/`、Windowsでは`\`)にはマッチしません。

UNIX



LinuxPOSIX準拠のシステムでは``と`?`が標準で定義されています。`[...]`に加え、CシェルBashなどのシェルでは、AlternationやBrace Expansionといった拡張構文もサポートしています。Bashでは`extglob`オプションを有効化することで、拡張グロブを用いたより複雑なパターンマッチングも可能です。

Windows



MS-DOSやWindowsの`COMMAND.COM`、`cmd.exe`はグロブ展開を直接行いません。ワイルドカードはプログラムにそのまま渡され、プログラム側で処理されます。シェルの内部コマンドでは制限付きながら同様の構文が利用できますが、`[...]`はサポートされておらず、``はパターンの末尾にのみ使用できます。

Windows PowerShell



Windows PowerShellはUNIXシェルのグロブ構文とほぼ同様の機能を備えています。

SQL



SQLの`LIKE`句では、`%`が``、`_`が`?`に相当するワイルドカードとして使用できます。`[...]`に相当する機能は標準SQLにはありませんが、多くのSQL実装では`LIKE`句を拡張し、正規表現に近い機能を提供しています。Transact-SQLなどの一部のSQL拡張では`[...]`に似た機能が提供されています。

正規表現との比較



グロブと正規表現はどちらもパターンマッチングに使用されますが、いくつかの違いがあります。グロブは文字列全体へのマッチングを試みるのに対し、正規表現は部分文字列へのマッチングも可能です。また、グロブは正規表現のような繰り返しやメタ文字の高度な機能を備えていません。

グロブの実装例



様々なプログラミング言語でグロブ機能が提供されています。以下に例を示します。

Bash、tcsh、zsh: Unix系シェルの標準機能
cmd.exe: Windowsのコマンドラインインタプリタは、グロブを行うアプリケーションに依存
Windows PowerShell: グロブをサポートするCmdletを提供
D言語: `std.path`モジュールの`globMatch`
Node.js: `minimatch`ライブラリ
Go: `filepath`パッケージの`Glob`関数
Java: `Files`クラスのメソッド
Haskell: `System.FilePath.Glob`モジュールの`Glob`パッケージ
Perl: `glob`関数とGlob拡張
PHP: `glob`関数
Python: `glob`モジュールと`fnmatch`モジュール
Ruby: `Dir`クラスの`glob`メソッド
SQLite: `GLOB`関数
* Tcl: 正規表現とグロブの両方をサポート

まとめ



グロブは、ファイル名などのパターンマッチングに便利なワイルドカード機能です。Unix系システムでは広く利用されており、多くのプログラミング言語でもサポートされています。正規表現と比較して機能は限定的ですが、ファイル操作など、特定の用途においては非常に効率的なツールとなります。それぞれの言語や環境におけるグロブの実装方法を理解することで、より効率的なプログラミングを行うことができます。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。