先週から、ファイル検索ツールを作っているんだけど。
ファイル名をワイルドカード検索対応しよう!っと思ったので
ワイルドカードぽい動きを正規表現(System.Text.RegularExpressions.Regex)で実装(C#)。
実装したワイルドカードは、
[*]:0文字以上の文字列
[?]:1文字の文字列
ってのが仕様です。
ある程度出来たので、Windowsのエクスプローラの検索コンパニオンと比較テスト
(検索コンパニオンの犬は、ローバー犬のロッキー君らしいです)
そこで、わかった事が!
ロッキー君は、検索キーワードに半角スペースを入れると、想定外の結果を返す。
(私の思い込みの想定外ですが)
***********以下 ロッキー君でのファイル検索テスト結果************
<検索対象フォルダに格納されているファイル一覧>
データダウンロード.xls
データダウン[半角スペース]ロード.xls
データダウン[半角スペース][半角スペース]ロード.xls
データダウン[全角スペース]ロード.xls
データダウン@ロード.xls
データダウン@@ロード.xls
データダウン@ロード.xls
関係ない.xls
【検証1】
検索文字:
ダウンロード
ヒットファイル:
ダウンロード.xls
【検証2】
検索文字:
ダウン[半角スペース]ロード
ヒットファイル:
データダウンロード.xls
データダウン[半角スペース]ロード.xls
データダウン[半角スペース][半角スペース]ロード.xls
データダウン[全角スペース]ロード.xls
データダウン@ロード.xls
データダウン@@ロード.xls
データダウン@ロード.xls
【検証2】
検索文字:
ダウン[半角スペース][半角スペース]ロード
ヒットファイル:
データダウンロード.xls
データダウン[半角スペース]ロード.xls
データダウン[半角スペース][半角スペース]ロード.xls
データダウン[全角スペース]ロード.xls
データダウン@ロード.xls
データダウン@@ロード.xls
データダウン@ロード.xls
【検証3】
検索文字:
ダウン[全角スペース]ロード
ヒットファイル:
データダウン[全角スペース]ロード.xls
【検証4】
検索文字:
ダウン[半角スペース]@[半角スペース]ロード
ヒットファイル:
データダウン@ロード.xls
データダウン@@ロード.xls
【検証5】
検索文字:
ダウン[半角スペース]@@[半角スペース]ロード
ヒットファイル:
データダウン@@ロード.xls
【検証6】
検索文字:
ダウン*ロード
ヒットファイル:
なし
【検証7】
検索文字:
*ダウン*ロード*
ヒットファイル:
データダウンロード.xls
データダウン[半角スペース]ロード.xls
データダウン[半角スペース][半角スペース]ロード.xls
データダウン[全角スペース]ロード.xls
データダウン@ロード.xls
データダウン@@ロード.xls
データダウン@ロード.xls
【検証8】
検索文字:
*ダウン[半角スペース]ロード*
ヒットファイル:
なし
【検証9】
検索文字:
???ダウン?ロード????
ヒットファイル:
データダウン[半角スペース]ロード.xls
データダウン[全角スペース]ロード.xls
データダウン@ロード.xls
データダウン@ロード.xls
【検証10】
検索文字:
???ダウン[半角スペース]ロード????
ヒットファイル:
なし
【検証11】
検索文字:
[半角スペース]
ヒットファイル:
データダウンロード.xls
データダウン[半角スペース]ロード.xls
データダウン[半角スペース][半角スペース]ロード.xls
データダウン[全角スペース]ロード.xls
データダウン@ロード.xls
データダウン@@ロード.xls
データダウン@ロード.xls
関係ない.xls
【以下推測】
どうやら、*、?の一般的なワイルドカードを使わない検索の場合に使う半角スペースは、
*と同様に、0文字以上の文字列に相当する。
ただし、キーワードに *、? があると。。。その機能は変わる。
【検証8】で、
データダウン[半角スペース]ロード.xls
が、ヒットしないのは謎
どのようになるかは、不明
(誰か知ってる人は教えてください。)
全角スペースは、文字として認識されワイルドカードのような機能は無いようだ。
まあ、そんな感じなので、俺俺ワイルドカードメソッドは、
*と?のみの対応にしよう。。。
検証環境 WinXp Pro Sp2