C#正則マッチング、グループ化、置換

2310 ワード

2つの例でプレゼンテーションしましょう
1、WebServiceを引用する項目があります.何台かのサーバーに同時に送信されているので、切り替えを容易にするために、そのIPを動的に変更することができます(IPが違うだけで、WebServiceが違うわけではありません).だから、その中のサーバーアドレス部分を置き換えるだけでいいです.
2,クエリー文字列から所望の資料を抽出し,aspのようなウェブページに復元する.Netのviewstate機能
        private string testrex(Match m)

        {

            // 0,      ,           

            return m.Groups[1] + "/88.88.88.88:1000" + m.Groups[3];

        }



        protected void regexTest()

        {

            //      

            string s = "http://221.221.221.221:8180/ws/services/n_ophospitaldoctorservice?wsdl";



            //  IP       88.88.88.88:1000

            Regex rx = new Regex(@"(https?:/)(/[^/]+)(/.*)");



            MatchEvaluator me = new MatchEvaluator(testrex);

            //s = rx.Replace(s, me);//  1,     

            s = rx.Replace(s, "$1/88.88.88.88:1000$3"); //  2,        

            //  88.88.88.88:1000       ,            http://   (http:/) (/221.232.137...),

            //     ,     (https?://)  ,    rx.Replace(s,"$188.88.88.88:100$3"),  ,$1  $88 ,

            //     $              

            //  ,   MatchEvaluator            ,     group,   $

            Response.Write(s);

            Response.Write("<br/>");



            //            

            string depSelectedSql = " 1=1  and reserve_date>=to_date('2010-10-10','yyyy-mm-dd') and reserve_date<=to_date('2010-11-10','yyyy-mm-dd')";



            Regex r = new Regex(@"reserve_date.=to_date.'(\d\d\d\d-\d\d-\d\d)", RegexOptions.IgnoreCase);

            MatchCollection mc = r.Matches(depSelectedSql);

            if (mc.Count < 2)

            {

                Response.Write("invalid query string!");

                return;

            }

            string sdate = mc[0].Groups[1].Value;

            string edate = mc[1].Groups[1].Value;



            Response.Write(sdate + "<br/>" + edate);

        }

結果:
http://88.88.88.88:1000/ws/services/n_ophospitaldoctorservice?wsdl2010-10-102010-11-10
MatchEvealuatorについては、他の簡単な書き方があります.この文書を参照してください.