買太郎'sキャッシュメモリFab

キャッシュ生産中。。。

目次

日記カテゴリ

書庫

ギャラリ

Blog 利用状況

2007年2月20日 #

検索コンパニオンでの半角スペースの謎

先週から、ファイル検索ツールを作っているんだけど。
ファイル名をワイルドカード検索対応しよう!っと思ったので
ワイルドカードぽい動きを正規表現(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

posted @ 13:09 | Feedback (2)