Tag: CSharp/正規表現

目次

関連ページ

参考情報

基本

  • Regexクラスのメソッドを使う。
  • インスタンスメソッドとstaticメソッド両方あるが、同じ正規表現を使い回す場合はインスタンスメソッドを使うという方針でよさそう。
    メソッド名目的戻り値
    IsMatch正規表現と一致するかどうかを判定。bool
    Match最初のマッチだけ取得。Match
    Matches全てのマッチを取得。MatchCollection
    Split正規表現で文字列を分割stringの配列
    Replaceマッチする箇所を置換string
  • @マークを使って文字列中の\をエスケープシーケンスとして解釈させないことができる( つまり、@"\d"などとかくことができる)ので複雑な正規表現を書く場合便利。

正規表現要素

  • 正確には正規表現言語要素を参照のこと。
  • 個人的によく使う正規表現。@"\d\d\d\d"のように書ける(エスケープする必要なし)。
    サンプル意味
    [a-z0-9]aからzと0から9にマッチ。
    .任意の1文字。
    *直前の文字の0文字異常の繰り返し。
    (a+)aの繰り返しをグループとしてキャプチャ。
    ^文字列の先頭にマッチ。
    $文字列の末尾にマッチ。
    \s空白にマッチ。
    \S空白以外にマッチ。
    \d数字にマッチ。
    \w単語に使われる文字にマッチ。

IsMatch

  • 正規表現が一致するかどかを判定するだけのメソッド。一致した部分を後から操作とかはできない。
  • サンプル。
                string str = "Hello world!";
                Regex reg = new Regex(@"world");
                if (reg.IsMatch(str))
                {
                    Debug.WriteLine("Match");
                }
                else
                {
                    Debug.WriteLine("Not Match");
                }
    
  • 出力。
    Match

Match

  • 正規表現の最初の一致をMatchとして返す。一致したかどうかはMatchクラスのSuccessプロパティで判定できる。一致した部分文字列はMatchクラスのGroupsプロパティから取得できる。
  • サンプル。
                string str = "Hello woooooorld!";
                Regex reg = new Regex(@"w(o+)rld");
                Match m = reg.Match(str);
                if (m.Success)
                {
                    Debug.WriteLine("Match");
                    Debug.WriteLine("Groups[0]=" + m.Groups[0].Value);
                    Debug.WriteLine("Groups[1]=" + m.Groups[1].Value);
                }
                else
                {
                    Debug.WriteLine("Not Match");
                }
    
  • 出力。
    Match
    Groups[0]=woooooorld
    Groups[1]=oooooo
    

Replace

  • 正規表現に一致する部分を置換文字列で置換する。

単純な例

  • サンプル
                string str = "abccdefcccxyzcc";
                Regex reg = new Regex(@"c+");
                string result = reg.Replace(str, "C");
                Debug.WriteLine(result);
    
    
  • 出力
    abCdefCxyzC
    

MatchEvaluatorを使った例

  • 置換処理が起こるたびにMatchEvaluatorデリゲートを呼び出しその戻り値で置換する事もできる。
  • サンプル
            private void ReplaceMatchEvaluator_Clicked(object sender, RoutedEventArgs e)
            {
                string str = "abccdefcccxyzcc";
                Regex reg = new Regex(@"c+");
                string result = reg.Replace(str, MyReplace);
                Debug.WriteLine(result);
                foreach (string beforeString in beforeStrings)
                {
                    Debug.WriteLine(beforeString);
                }
            }
    
            private int i = 0;
            private List<string> beforeStrings = new List<string>();
            private string MyReplace(Match m)
            {
                i++;
                beforeStrings.Add(m.Groups[0].Value);
                return i.ToString();
            }
    
  • 出力
    ab1def2xyz3
    cc
    ccc
    cc
    

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-04-13 (水) 16:48:09