###前提・実現したいこと
C#にて、対象文字列とワイルドカードを引数として渡したら
対象文字列がワイルドカードの条件に当てはまるかどうかをTrue or Falseを返すようなメソッドを
作りたいと考えています。
なお、ワイルドカードは「ABC*,DEF??,*GH」といったように複数の条件をカンマ区切りで
一度に指定できるようにしたいです。
例えば、ObjText="TestText"である場合
Wildcard="ABC,Te*"ならTrueを返し、Wildcard="Te*,ABC,"でもTrueを返すが
Wildcard="ABC,DE*"ならFalseを返すといった形です。
###発生している問題・エラーメッセージ
CS0161 'Form1.test(string, string)': 値を返さないコード パスがあります。
下記のように記述したところ、上記のようなエラーが出てコンパイルできない状況です。
###該当のソースコード
public bool test(string ObjText, string Wildcard) { string[] stArrayData = Wildcard.Split(','); foreach (string stData in stArrayData) { //ワイルドカードの文字列を正規表現の文字列に変換する var regexPattern = Regex.Replace(stData, ".", m => { string s = m.Value; if (s.Equals("?")) { //?は任意の1文字を示す正規表現(.)に変換 return "."; } else if (s.Equals("*")) { //*は0文字以上の任意の文字列を示す正規表現(.*)に変換 return ".*"; } else { //上記以外はエスケープする return Regex.Escape(s); } } ); bool rg = new Regex(regexPattern).IsMatch(ObjText); if (rg) { return true; } else { return false; } } }
###試したこと
例外が起きた場合に if(rg)の中のreturn分を通らない場合があるのかもしれないと考え、
Try-Catchをいろいろな場所に記述してCatch内にreturnを入れてみたりしたのですが、エラーに変化はありませんでした。ワイルドカードを正規表現に変換するところの処理は正直あまり理解できておらず、見当違いなことをしているかもしれず恐縮なのですが、お知恵をお貸しいただければ幸いです。
###補足情報(言語/FW/ツール等のバージョンなど)
C#を使ったワイルドカードの使用については、下記を参考にしました。
http://qiita.com/kazuhirox/items/5e314d5e7732041a3fe7

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/05/11 13:11