グロブ
From Wikipedia, the free encyclopedia
構文
最も一般的なワイルドカードは*、?、および[…]である。
| ワイルドカード | 解説 | 使用例 | ||
|---|---|---|---|---|
| グロブ表現 | マッチする文字列の例 | マッチしない文字列の例 | ||
* |
0文字以上の任意の文字列にマッチ | 営業* |
営業、営業実績 |
営、2019年度営業、2019年度営業計画 |
*営業* |
営業、営業実績、2019年度営業、2019年度営業計画 |
営 | ||
? |
任意の1文字にマッチ | 営業実績? |
営業実績1、営業実績B |
営業実績、営業実績12 |
[c1c2…cN] |
括弧内で列挙されたどれか1文字にマッチ | 営業実績[123] |
営業実績1、営業実績2、営業実績3 |
営業実績、営業実績4、営業実績12、 |
[cmin-cmax] |
括弧内で指定された範囲内の1文字にマッチ | 営業実績[0-9] |
営業実績1、営業実績3、営業実績4、営業実績5、営業実績9 |
営業実績、営業実績10、営業実績B、営業実績2019 |
いずれの場合においても、パス区切り文字(UNIXでは/、Windowsでは\)にマッチすることは絶対にない。
UNIX
LinuxやPOSIXのシステムでは*および?が定義されているが、[…]には以下の2つが追加されている[3][4]:
| ワイルドカード | 解説 | 使用例 | ||
|---|---|---|---|---|
| グロブ表現 | マッチする文字列の例 | マッチしない文字列の例 | ||
[!c1c2…cN] |
括弧内で列挙されていない何かの1文字にマッチ | 営業実績[!456] |
営業実績1、営業実績9、営業実績B |
営業実績、営業実績4、営業実績5、営業実績6、営業実績12 |
[!cmin-cmax] |
括弧内で指定されていない範囲内の1文字にマッチ | 営業実績[!3-5] |
営業実績1、営業実績9、営業実績B |
営業実績、営業実績3、営業実績4、営業実績5、営業実績10、営業実績2019 |
(C ShellやBashなどの)シェルの中には、AlternationやBrace Expansionとして知られる追加の構文をサポートしているものもある。
Bashは上記以外のパターンマッチ演算子を使用して、括弧で囲まれたパターンの複数発生へのマッチを可能にするextended globbing(拡張グロブ)もサポートする。この機能はextglobシェルオプションをセットすることで有効になる[5]。
Windows PowerShell
Windows PowerShellは、上記で述べたものと同様に定義された構文を全て搭載しているので、機能追加を行う必要はない[6]。
Windows
MS-DOSおよびWindowsの、COMMAND.COM と cmd.exe は、グロブ展開を行わず、コマンドラインにあるワイルドカードの * などは起動するプログラムにそのまま渡され、プログラム側で対応していればそれなりの動作をする(かもしれない)。シェルの内部コマンドなどで解釈される場合については制限付きながらほぼ同様の構文を持つが、構文が一見似ているだけで、「制限付き」の制限のおかげで全く別物であり、[…]は存在せず、さらにCOMMAND.COMの*はパターンの終わりにしか付けられない。
SQL
SQLの、LIKE条件中のパターンには、?や*に相当する表現が使える。[…]に相当する表現は存在しない。
| 通常のワイルドカード | SQLのワイルドカード |
|---|---|
? |
_ |
* |
% |
標準SQLにおけるLIKE条件では、単純な文字列マッチにグロブと似た構文を利用する。パーセント記号 (%) は0文字以上の文字列にマッチし、アンダースコアは1文字にマッチする。しかしながらSQLコミュニティにおいて「グロブ」という用語は一般的ではない。SQLの実装の多くはLIKE条件を拡張し、正規表現の要素を取り入れた、より豊富なパターンマッチを可能としている。
独自拡張SQLの中にはTransact-SQLのように、[…]の機能を提供するものもある。この例が[characters]や[^characters][7]である。
正規表現との比較
グロブには、式の前にある部分を複数回繰り返すことを可能とする、クリーネ閉包が無いなど、正規表現とは異なったものである。
| ワイルドカード | 等価の正規表現 |
|---|---|
? |
. |
* |
.* |
グロブは文字列全体とのマッチを試みる。例えば、営業実績*.xlsx は 営業実績.xlsx や 営業実績10月.xlsx にマッチするが、営業実績.xls や 2020年度営業実績.xlsx や 営業実績.docx にはマッチしない。