| 開発者 | リッチ・ザルツ |
|---|---|
| タイプ | パターンマッチング |
wildmat は、Rich Salzによって開発されたパターン マッチングライブラリです。Bourneシェルで既に使用されているワイルドカード構文に基づいて、wildmat は、正規表現で通常提供されるものよりも単純な構文で、アプリケーション間でパターンをマッチングするための統一されたメカニズムを提供します。一致をテストするときに、パターンは各文字列の先頭と末尾に暗黙的に固定されます。
2019年6月、Rich Salzは、現在は廃止されたライブラリのオリジナルバージョンをパブリックドメインとしてGitHubでリリースしました。[1]
パターンマッチング操作
パターンと一致をチェックするソース間の厳密な 1 対 1 の一致以外に、5 つのパターン マッチング操作があります。
- アスタリスク ( * ) は、0 個以上の文字のシーケンスと一致します。
- 疑問符 ( ? ) は任意の 1 文字と一致します。
- 指定された文字のセット。文字のリスト、または範囲の先頭と末尾がマイナス (またはダッシュ) 文字で区切られた文字の範囲、またはリストと範囲の任意の組み合わせとして指定されます。ダッシュは、セットの先頭または末尾である場合、文字としてセットに含めることもできます。このセットは角括弧で囲まれます。閉じ角括弧 (]) は、セットの最初の文字である場合にセットで使用できます。
- セットの否定。これは、セットと同じ方法で指定されますが、テスト文字列の先頭の開き角括弧のすぐ内側にキャレット文字 (^) を追加します。(NNTP では、代わりに ! が指定されています。実装は、どちらを実行するようにも構成できます。)
- バックスラッシュ ( \ ) 文字は、開き角括弧 ( [ )、アスタリスク、バックスラッシュ、または疑問符の特殊な意味を無効にします。 2 つのバックスラッシュが連続すると、バックスラッシュは特別な意味を持たない文字として評価されます。
例
- *foo* は 「foo」を含む文字列に一致します。
- mini* は 、「mini」で始まるものすべてに一致します (文字列「mini」自体も含む)。
- ???* は 3 文字以上の任意の文字列に一致します。
- [0-9a-zA-Z] はすべての英数字 ASCII文字に一致します。
- [^]-] は 閉じ角括弧またはダッシュ以外の文字に一致します。
使用法
wildmat は Salz 自身のINNなどのNNTP実装で最もよく見られますが、 GNU tar やTransmissionなどの無関係なソフトウェアでも見られます。GNU tar は 1992 年 9 月に wildmat を POSIX fnmatch glob マッチャーに置き換えました。初期のバージョンでは、閉じられていない[に対する潜在的な範囲外アクセスが含まれていました。[2]
オリジナルのバイト指向の wildmat 実装は、マルチバイト文字セットを処理できず、検索対象のテキストに複数の互換性のない文字セットが含まれている場合に問題が発生します。UTF -8エンコードを指向した wildmat の簡易バージョンが、 IETF NNTP ワーキング グループによって開発されました。これは 、NNTP の 2006 年標準 であるRFC 3977 (セクション 4)の一部です。
UTF-8 をサポートする新しい INN では、wildmat のすべての機能をサポートする「uwildmat」が追加されました。この 2000 年の書き換えは Russ Allbery によって実行され、元の実装の OOB を修正しました。密集した C ループは、より小さなステートメントに書き出されました。[3] [4]
Rsync には、 GPLv3 ライセンスの wildmat 派生版である wildmatch が含まれており、Wayne Davison によって修正されています。Gitバージョン管理システムはこれをインポートして利用しています。UTF-8 はサポートされていませんが、OOB が固定されており、文字クラスとスター グロブ (任意の深さを表す **) が追加でサポートされています。[5]
参照
参考文献
- ^ Salz, Rich (2019年6月25日). 「wildmat: 古くからあるクラシックな wildmat パターン マッチャー; パブリック ドメイン」. GitHub . 2019年11月25日閲覧。
- ^ Salz, Rich (2019 年 6 月 25 日). "wildmat.c". GitHub .
不正なパターンに対しては堅牢ではない可能性があります。たとえば、「foo[a-」はセグメンテーション違反を引き起こす可能性があります。
- ^ – Linuxライブラリ関数マニュアル
- ^ 「uwildmat.c in trunk/lib – INN」inn.eyrie.org . 2019年11月27日閲覧。
- ^ “git/git: wildmatch.c”. GitHub . 2022年2月16日.
外部リンク
- リッチ・ザルツ(1991年4月4日)。 「v17i079: wildmat-1.4 - /bin/sh スタイルのパターン マッチャー、Part01/01」。ニュースグループ: comp.sources.misc.ネット使用: 1991Apr4.034350.3923@sparky.IMD.Sterling.COM。
- Rich Salz (1991 年 3 月 9 日)。「v17i034: wildmat - /bin/sh スタイルのパターン マッチャー、パート 01/01」。ニュースグループ: comp.sources.misc。Usenet : 1991Mar9.044016.2409@sparky.IMD.Sterling.COM。
