12

ワイルドカード文字列一致 API (正規表現一致ではない) を探しています。Win32 API 以外は使用できません。

4

6 に答える 6

11

PathMatchSpecがありますが、処理はファイルに特化しているため、一般的なワイルドカード マッチングが必要な場合は、期待どおりの結果が得られない可能性があります。

それ以外の場合は、Pavel が詳述したように、おそらく RegEx を使用する必要があります。

[編集] FindFirstFile/FindNextFileのプロパティを共有する と誤って仮定しました。いくつかのテストを実行しましたが、そうではありません。というわけで最有力候補のようです。PathMatchSpec

于 2009-07-31T21:53:37.233 に答える
9

何年も経ち、誰もあなたにこの答えを与えなかったのは奇妙です:

探していることを正確に実行する WIN32 API があります。(MSDNで「ワイルドカード」を検索しているのを見つけました)

その名はSymMatchString()。これは、オペレーティング システムの一部である DbgHelp.dll にあります。

アプリがマルチスレッド化されている場合は、API 呼び出しの周りに CriticalSection を配置してください。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms681355%28v=vs.85%29.aspx

ワイルドカードの一致に内部的に使用するAPIFindFirstFile()は、おそらくFsRtlIsNameInExpression().

エルム

于 2013-06-26T15:36:01.457 に答える
5

最も簡単な方法は、次のルールに従って、glob パターンを正規表現に変換することです。

  • *になる.*
  • ?になる.
  • のいずれかを\|.^$+()[]{}前に付けることでエスケープされます。\

これは部分的に真実です。

次のルールは、XP+ コマンド プロンプトでの DIR の動作から導き出されます:
*と同じで*.*あり、正規表現.+
?になるワイルドカードが続か.?ない限り正規表現になる
?.
*.[^.]+$

于 2009-07-31T21:36:43.960 に答える
4

およびAPI はワイルドカード マッチをFindFirstFile行いFindNextFileますが、ファイル名に対してのみです。

Win32しか使えないの?STLまたはCRTはどうですか?ブーストを使用していますか?

Win32 API の制限がない場合は、オープン ソース プロジェクトのコードを使用することをお勧めします。別のオプションは、グロブを正規表現に変換することです。これは、正規表現の置換操作で実行できると思います。

編集: 最初の Google マッチは PHP コードです:

http://cvs.php.net/viewvc.cgi/php-src/win32/

于 2009-07-31T21:19:33.433 に答える
4

単純なワイルドカード比較 ( globbing ) を求めている場合は、これ(コードで使用するもの)を含む独自のものを作成した人もいます。

于 2009-07-31T21:59:07.520 に答える
0

あなたの要件は何ですか?' ' 記号を使用して0 個以上の文字に一致させようとしているだけですか、それとも '?' を使用する予定ですか? シンボルも。' ' だけの場合、a、 aa b、a b*c などの型パターンを探す必要がありますか? 要件が限られている場合は、C++ ランタイム ライブラリの strstr 関数で簡単に解決できます。

于 2009-07-31T21:32:50.270 に答える