2017年11月 / 10月≪ 123456789101112131415161718192021222324252627282930≫12月

インフォメーション

FC2ブログで画像等を一括アップロードするソフトを地味に配布してます。
FC2ブログ用ファイルアップロードの最新版はこちら
(ベクター)FC2ブログ用ファイルアップロード

--.--.-- (--)

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


 |  --:--  |  スポンサー広告  |  Top↑

2008.05.16 (Fri)

C#.NETでワイルドカードを使用して文字列検索したい

C#.NETでワイルドカードを使いたいけど、ファイルの取得時くらいにしか対応してない。
文字列の検索でワイルドカードを使用したいので、Regex(正規表現)クラスを利用して検索することに。

まずワイルドカードを正規表現に変換する。
Regex.Replaceで"?"と"*"だけ変換するのにつかうデリゲートメソッドを宣言。
デリゲートとかよくわからない

/// <summary>
/// ワイルドカードの検索文字列を正規表現に変換する
/// </summary>
/// <param name="m"></param>
/// <returns></returns>
private static string WildCardMatchEvaluator(System.Text.RegularExpressions.Match m)
{
    string s = m.Value;
    // ?は任意の1文字
    if (s.Equals("?")) return ".";
    // *は任意の文字列
    else if (s.Equals("*")) return ".*";
    // それ以外はエスケープ
    else return System.Text.RegularExpressions.Regex.Escape(s);
}


Match.Replaceと上記のメソッドを使ってwcPattern(ワイルドカード)->rPattern(正規表現)に変換。
MatchEvaluator型をnewして使う。

string rPattern = System.Text.RegularExpressions.Regex.Replace(wcPattern, ".", 
    new System.Text.RegularExpressions.MatchEvaluator(WildCardMatchEvaluator)); 


rPatternにはwcPatternの「?」が「.」に、「*」が「.*」に変換された文字が入ります。
「+」とか「(」とかが入っていた場合はエスケープされます。「\+」とか「\(」

あとはrPatternを使って正規表現で検索するなり好きに

if (System.Text.RegularExpressions.Regex.IsMatch(str, rPattern))
{
    MessageBox.Show("まっちした");
}


スポンサーサイト


 |  13:27  |  C#.NET  |  トラックバック(0)  |  コメント(0)  |  Top↑
 | BLOGTOP | 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。