C# 正則表達式應用

来源:https://www.cnblogs.com/jiekzou/archive/2018/07/11/9295600.html
-Advertisement-
Play Games

正則表達式平時不常用,經常都是用的時候,臨時抱佛腳,查文檔,然後就是被各種坑之後,才會逐漸熟練。 線上正則表達式測試:http://tool.oschina.net/regex/ 線上JSON格式化:https://www.bejson.com/ 正則表達式手冊:http://tool.oschin ...


正則表達式平時不常用,經常都是用的時候,臨時抱佛腳,查文檔,然後就是被各種坑之後,才會逐漸熟練。

線上正則表達式測試:http://tool.oschina.net/regex/

線上JSON格式化:https://www.bejson.com/

正則表達式手冊:http://tool.oschina.net/uploads/apidocs/jquery/regexp.html

先來看下代碼和運行效果吧

 string msg, rex;
            Match m;
            msg = "昨日總能耗0度。 (長沙市口腔醫院)星期一【紫衡技術】";
            rex = @".*(昨日總?能耗)([0-9]{1,}[.]?[0-9]*)*度。 \((.*)\)(.{3}).*";
            m = Regex.Match(msg, rex);
            Console.WriteLine("0:" + m.Success);
            WriteGroupInfo(m);

            //1
            msg = @"上周總能耗28401.4度。 (沙井街道辦)星期一【紫衡技術】";
             rex = @".*(上周總?能耗)([0-9]{1,}[.][0-9]*)*度。 \((.*)\)(.{3}).*";
            //昨日總能耗2582.1度。【長沙市天心區人民法院】2018 - 07 - 08【紫衡技術】
             m = Regex.Match(msg, rex);
            var r = m.Success;
            Console.WriteLine("1:"+r);
            WriteGroupInfo(m);

            //2
            rex = @".*(昨日總?能耗)([0-9]{1,}[.]?[0-9]*)*度。\【(.*)\】(\d{4}-\d{2}-\d{2}).*";
            msg= "昨日總能耗209.9度。【長沙市天心區人民檢察院】2018-07-08【紫衡技術】";
            Match m1 = Regex.Match(msg, rex);
            Console.WriteLine("2:"+m1.Success);
            WriteGroupInfo(m1);

            //3
            rex = @".*(上周總?能耗)([0-9]{1,}[.]?[0-9]*)*度。 \((.*)\)(.{3}).*";
            msg = "上周總能耗10922.4度。 (深圳市地方稅務局第二稽查局)星期一【紫衡技術】";
            m1 = Regex.Match(msg, rex);
            Console.WriteLine("3:"+m1.Success);
            WriteGroupInfo(m1);

            //4
            rex = @".*(上月總?能耗)([0-9]{1,}[.]?[0-9]*)*度。 \((.*)\)(.{8}).*";
            msg = "上月總能耗49276.9度。 (深圳市地方稅務局第二稽查局)2018年06月【紫衡技術】";
            m1 = Regex.Match(msg, rex);
            Console.WriteLine("4:"+m1.Success);
            WriteGroupInfo(m1);

            //5
            rex = @".*(建築名稱)\:(.*),在(\d{4}-\d{2}-\d{2}).{3}([0-9]{1,}[.][0-9]*)*度。";
            msg = "建築名稱:長沙市天心區人民法院,在2018-07-08日用電2582.1度。";
            m1 = Regex.Match(msg, rex);
            Console.WriteLine("5:"+m1.Success);
            WriteGroupInfo(m1);

            //6
            rex = @"(今日能耗)\:([0-9]{1,}[.]?[0-9]*)";
            msg = "今日能耗:300【紫衡技術】";
            m1 = Regex.Match(msg, rex);
            Console.WriteLine("6:" + m1.Success);
            WriteGroupInfo(m1);

            //^【([^】]+)】異常(.+?)服務(【([^】]+)】未找到或者未安裝!)*(服務【([^】]+)】未找到或者未安裝!)*(服務【([^】]+)】未找到或者未安裝!)*(服務【([^】]+)】未找到或者未安裝!)
//*(服務【([^】]+)】未找到或者未安裝!)*(服務【([^】]+)】未找到或者未安裝!)*(服務【([^】]+)】未找到或者未安裝!)*(服務【([^】]+)】未找到或者未安裝!)*.+
rex = @"^【([^】]+)】異常(.+?)服務(【([^】]+)】未找到或者未安裝!)*(服務【([^】]+)】未找到或者未安裝!)*(服務【([^】]+)】未找到或者未安裝!)*(服務【([^】]+)】未找到或者未安裝!)*
(服務【([^】]+)】未找到或者未安裝!)*(服務【([^】]+)】未找到或者未安裝!)*(服務【([^】]+)】未找到或者未安裝!)*(服務【([^】]+)】未找到或者未安裝!)*.+
"; msg = "【公司WNC服務監控台】異常 - 服務【Secom.Emx.SmsServer.Service】未找到或者未安裝!【紫衡技術】"; m1 = Regex.Match(msg, rex); Console.WriteLine("7:" + m1.Success); WriteGroupInfo(m1); Console.ReadKey(); } private static void WriteGroupInfo(Match m) { var g = m.Groups; if (g.Count > 0) { for (var i = 0; i < g.Count; i++) { Console.WriteLine(i+":"+g[i].Value); } } }

運行結果:

需要註意的地方,待匹配文字中的空格以及全形和半形字元要註意區分。

存儲正則表達式字元串,不能存儲到Json文件中,特殊字元會出現轉義,存XML中沒有這個問題。通過構造sql語句存儲到mysql中的時候,反斜杠\將會被直接吃掉,所以插入之前要先進行轉義。

 var _TemplateReg = v.Value.TemplateReg.Replace("\\", "\\\\");

在C#中\\表示\,\\\\就表示\\。

之前在一個全局變數中存儲了許多數據,現在我需要將其存儲到資料庫中。原來的代碼如下:

        /// <summary>
        /// 簡訊模板
        /// </summary>
        #region old code
        Dictionary<string, SmsTemplate> templates = new Dictionary<string, SmsTemplate> {
            // 能耗日報模板  
            {
                "能耗提醒",
                new SmsTemplate {
                    TemplateCode = "SMS_139242133",
                    TemplateReg = @"測試簡訊通知",
                    TemplateParam =  new { name=string.Empty, date=string.Empty, energy=string.Empty },
                    SignName = "紫衡技術"
                }
            },
            {
                "測試",
                new SmsTemplate {
                    TemplateCode = "SMS_119091381",
                    TemplateReg = @"測試簡訊通知",
                    TemplateParam =  new { name=string.Empty, date=string.Empty, energy=string.Empty },
                    SignName = "紫衡技術"
                }
            },
            {
                "能耗",
                new SmsTemplate {
                    TemplateCode = "SMS_119076277",
                    TemplateReg = @"^[^(上周)|(上月)]*(能耗)值*[::]*([\d.]+).*\(([^)]+)\)(\d{4}-\d{2}-\d{2}).*$",
                    TemplateParam =  new { name=string.Empty, date=string.Empty, energy=string.Empty },
                    SignName = "能耗報告"
                }
            },
            {
                "能耗Extend",
                new SmsTemplate
                {
                    TemplateCode = "SMS_128880488",
                    TemplateReg = @"^[^(上周)|(上月)]*(能耗)值*[::]*([\d.]+).*\(([^)]+)\)(\d{4}-\d{2}-\d{2}).*$",
                    TemplateParam =  new { name=string.Empty, date=string.Empty, energy=string.Empty, extend=string.Empty},
                    SignName = "能耗報告"
                }
            },
            {
                "昨日能耗",
                new SmsTemplate {
                    TemplateCode = "SMS_139242142",
                    TemplateReg = @".*(昨日總?能耗)([0-9]{1,}[.]?[0-9]*)*度。 \((.*)\)(.{3}).*",//昨日總能耗16677.6度。 (天心區鑫遠白天鵝酒店)星期一【紫衡技術】
                    TemplateParam =  new { name=string.Empty, date=string.Empty, energy=string.Empty },
                    SignName = "能耗報告"
                }
            },
             {
                "昨日能耗1",
                new SmsTemplate {
                    TemplateCode = "SMS_139242142",
                    TemplateReg = @".*(昨日總?能耗)([0-9]{1,}[.]?[0-9]*)*度。\【(.*)\】(\d{4}-\d{2}-\d{2}).*",//昨日總能耗209.9度。【長沙市天心區人民檢察院】2018-07-08【紫衡技術】
                    TemplateParam =  new { name=string.Empty, date=string.Empty, energy=string.Empty },
                    SignName = "能耗報告"
                }
            },
            {
                "上周能耗",
                new SmsTemplate {
                    TemplateCode = "SMS_119081757",
                    TemplateReg = @".*(上周總?能耗)值*[::]*([\d.]+).*\(([^)]+)\)(\d{4}-\d{2}-\d{2}).*",
                    TemplateParam =  new { name=string.Empty, date=string.Empty, energy=string.Empty },
                    SignName = "能耗報告"
                }
            },
            {
                "上月能耗",
                new SmsTemplate {
                    TemplateCode = "SMS_119086386",
                    TemplateReg = @".*(上月總?能耗)值*[::]*([\d.]+).*\(([^)]+)\)(\d{4}-\d{2}-\d{2}).*",
                    TemplateParam =  new { name=string.Empty, date=string.Empty, energy=string.Empty },
                    SignName = "能耗報告"
                }
            },
            {
                "定額",
                new SmsTemplate {
                    TemplateCode = "SMS_119076277",
                    TemplateReg = @".*(定額)值*[::]*([\d.]+).*\(([^)]+)\)(\d{4}-\d{2}-\d{2}).*",
                    TemplateParam =  new { name=string.Empty, date=string.Empty, energy=string.Empty },
                    SignName = "能耗報告"
                }
            },
            {
                "基準",
                new SmsTemplate {
                    TemplateCode = "SMS_119076277",
                    TemplateReg = @".*(基準)值*[::]*([\d.]+).*\(([^)]+)\)(\d{4}-\d{2}-\d{2}).*",
                    TemplateParam =  new { name=string.Empty, date=string.Empty, energy=string.Empty },
                    SignName = "能耗報告"
                }
            },
            {
                "節能量",
                new SmsTemplate {
                    TemplateCode = "SMS_119076277",
                    TemplateReg = @".*(節能量)值*[::]*([\d.]+).*\(([^)]+)\)(\d{4}-\d{2}-\d{2}).*",
                    TemplateParam =  new { name=string.Empty, date=string.Empty, energy=string.Empty },
                    SignName = "能耗報告"
                }
            },
            {
                "優化",
                new SmsTemplate {
                    TemplateCode = "SMS_119076277",
                    TemplateReg = @".*(優化)值*[::]*([\d.]+).*\(([^)]+)\)(\d{4}-\d{2}-\d{2}).*",
                    TemplateParam =  new { name=string.Empty, date=string.Empty, energy=string.Empty },
                    SignName = "能耗報告"
                }
            },
            // 報警日報模板
            {
                "報警",
                new SmsTemplate {
                    TemplateCode = "SMS_119076278",
                    TemplateReg = @"(建築\[)*(.+?)([\],,])*產生以下報警:(.+)(【紫衡技術】)",
                    TemplateParam =  new { name=string.Empty, date=string.Empty, alarm=string.Empty },
                    SignName = "能管系統報警"
                }
            },
            // 運維工單模板
            {
                "運維通知",
                new SmsTemplate {
                    TemplateCode = "SMS_119091206",
                    TemplateReg = "您有一條新的(.+)工單需處理【工單號[::]([^】]+).+",
                    TemplateParam =  new { type=string.Empty, code=string.Empty },
                    SignName = "運維繫統"
                }
            },
            {
                "運維搶單",
                new SmsTemplate {
                    TemplateCode = "SMS_119076276",
                    TemplateReg = "您有一條新的(.+)工單(提示)*【工單號[::]([^】]+).+",
                    TemplateParam =  new { type=string.Empty, code=string.Empty },
                    SignName = "運維繫統"
                }
            },
            {
                "運維派單",
                new SmsTemplate {
                    TemplateCode = "SMS_119076273",
                    TemplateReg =  "您有新的(.+)工單無人[搶|接]單【工單號[::]([^】]+).+",
                    TemplateParam =  new { type=string.Empty, code=string.Empty },
                    SignName = "運維繫統"
                }
            },
            {
                "庫存不足",
                new SmsTemplate {
                    TemplateCode = "SMS_119091203",
                    TemplateReg =  ".+【([^】]+)】.+庫存已不足.+",
                    TemplateParam =  new { type=string.Empty, code=string.Empty },
                    SignName = "運維繫統"
                }
            },
            {
                "維修簽到",
                new SmsTemplate {
                    TemplateCode = "SMS_119076712",
                    TemplateReg =  ".*您有(.*)未簽到【工單號:([^】]+)】.+",
                    TemplateParam =  new { type=string.Empty, code=string.Empty },
                    SignName = "運維繫統"
                }
            }

            ,
            {
                "報警搶單",
                new SmsTemplate {
                    TemplateCode = "SMS_119091869",
                    TemplateReg =  "您有(.*)報警.*無人[搶|接]單【工單號[::]([^】]+).+",
                    TemplateParam =  new { type=string.Empty, code=string.Empty },
                    SignName = "運維繫統"
                }
            }
            ,
            {
                "廣醫派工",
                new SmsTemplate {
                    TemplateCode = "SMS_135795374",
                    TemplateReg =  "您有新的(.+)工單(.+)需處理,詳情請打開“智慧機電運維繫統APP”查看。",
                    TemplateParam =  new { type=string.Empty, code=string.Empty },
                    SignName = "運維繫統"
                }
            }
            ,
            {
                "報警簽到",
                new SmsTemplate {
                    TemplateCode = "SMS_119081998",
                    TemplateReg =  "您有(.*)報警事件未現場簽到【工單號[::]([^】]+).+",
                    TemplateParam =  new { type=string.Empty, code=string.Empty },
                    SignName = "運維繫統"
                }
            },
            {
                "未處理完崔單",
                new SmsTemplate {
                    TemplateCode = "SMS_119076997",
                    TemplateReg =  "您有(.*)處理尚未完成【工單號[::]([^】]+).+",
                    TemplateParam =  new { type=string.Empty, code=string.Empty },
                    SignName = "運維繫統"
                }
            },
            {
                "運維崔單",
                new SmsTemplate {
                    TemplateCode = "SMS_119087014",
                    TemplateReg =  "您有一條(.+)催單提示【工單號[::]([^】]+).+",
                    TemplateParam =  new { type=string.Empty, code=string.Empty },
                    SignName = "運維繫統"
                }
            },
            {
                "運維工單事件",
                new SmsTemplate {
                    TemplateCode = "SMS_119091936",
                    TemplateReg =  "您有新的工單事件【工單號[::]([^】]+).+",
                    TemplateParam =  new { type=string.Empty, code=string.Empty },
                    SignName = "運維繫統"
                }
            },
            {
                "MAN服務未找到異常",
                new SmsTemplate {
                    TemplateCode = "SMS_120120306",
                    TemplateReg =  "^【([^】]+)】異常(.+?)服務(【([^】]+)】未找到或者未安裝!)*(服務【([^】]+)】未找到或者未安裝!)*(服務【([^】]+)】未找到或者未安裝!)*(服務【([^】]+)】未找到或者未安裝!)*(服務【([^】]+)】未找到或者未安裝!)*(服務【([^】]+)】未找到或者未安裝!)*(服務【([^】]+)】未找到或者未安裝!)*(服務【([^】]+)】未找到或者未安裝!)*.+",
                    TemplateParam =  new { type=string.Empty, code=string.Empty },
                    SignName = "能管365"
                }
            }

        };
        #endregion
View Code

我想直接通過代碼來自動將其遷移到mysql資料庫中去。

        /// <summary>
        /// 初始化數據,將原來代碼中的模板配置生成並載入到資料庫中
        /// </summary>
        /// <param name="templates"></param>
        /// <returns></returns>
        public int InitData(Dictionary<string, SmsTemplate> templates)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("INSERT INTO smstemplate VALUES");
            foreach(var v in templates)
            {
                var _TemplateReg = v.Value.TemplateReg.Replace("\\", "\\\\");
                sb.AppendFormat(@"('{0}','{1}','{2}','{3}','{4}'),",v.Key,v.Value.TemplateCode, _TemplateReg, JsonConvert.SerializeObject(v.Value.TemplateParam),v.Value.SignName);
            }
            string sql= sb.ToString().TrimEnd(',');
            var cmd = db.GetSqlStringCommand(sql);
            return db.ExecuteNonQuery(cmd);
        }
        /// <summary>
        /// 從資料庫中載入模板配置列表
        /// </summary>
        /// <returns>模板配置列表</returns>
        public Dictionary<string, SmsTemplate> GetSmsTemplate()
        {
            Dictionary<string, SmsTemplate> dic = new Dictionary<string, SmsTemplate>();
            var sql = "SELECT `Key`,`TemplateCode`,`TemplateReg`,`TemplateParam`,`SignName` FROM smstemplate";
            try
            {
                var cmd = db.GetSqlStringCommand(sql);
                SmsTemplate item;
                string key;
                using (var reader = db.ExecuteReader(cmd))
                {
                    while (reader.Read())
                    {
                        key = reader.GetString(0);
                        item = new SmsTemplate();
                        item.TemplateCode = reader.GetString(1);
                        item.TemplateReg = reader.GetString(2);
                        item.TemplateParam = (JObject)JsonConvert.DeserializeObject(reader.GetString(3));
                        item.SignName = reader.GetString(4);
                        dic.Add(key, item);
                    }
                }
            }
            catch(Exception ex)
            {
                throw new Exception(ex.Message);
            }

            return dic;
        }
構造完成後的sql腳本:
INSERT INTO smstemplate
VALUES
    (
        '能耗提醒',
        'SMS_139242133',
        '測試簡訊通知',
        '{"name":"","date":"","energy":""}',
        '紫衡技術'
    ),
    (
        '測試',
        'SMS_119091381',
        '測試簡訊通知',
        '{"name":"","date":"","energy":""}',
        '紫衡技術'
    ),
    (
        '能耗',
        'SMS_119076277',
        '^[^(上周)|(上月)]*(能耗)值*[::]*([\\d.]+).*\\(([^)]+)\\)(\\d{4}-\\d{2}-\\d{2}).*$',
        '{"name":"","date":"","energy":""}',
        '能耗報告'
    ),
    (
        '能耗Extend',
        'SMS_128880488',
        '^[^(上周)|(上月)]*(能耗)值*[::]*([\\d.]+).*\\(([^)]+)\\)(\\d{4}-\\d{2}-\\d{2}).*$',
        '{"name":"","date":"","energy":"","extend":""}',
        '能耗報告'
    ),
    (
        '昨日能耗',
        'SMS_139242142',
        '.*(昨日總?能耗)([0-9]{1,}[.]?[0-9]*)*度。 \\((.*)\\)(.{3}).*',
        '{"name":"","date":"","energy":""}',
        '能耗報告'
    ),
    (
        '昨日能耗1',
        'SMS_139242142',
        '.*(昨日總?能耗)([0-9]{1,}[.]?[0-9]*)*度。\\【(.*)\\】(\\d{4}-\\d{2}-\\d{2}).*',
        '{"name":"","date":"","energy":""}',
        '能耗報告'
    ),
    (
        '上周能耗',
        'SMS_119081757',
        '.*(上周總?能耗)值*[::]*([\\d.]+).*\\(([^)]+)\\)(\\d{4}-\\d{2}-\\d{2}).*',
        '{"name":"","date":"","energy":""}',
        '能耗報告'
    ),
    (
        '上月能耗',
        'SMS_119086386',
        '.*(上月總?能耗)值*[::]*([\\d.]+).*\\(([^)]+)\\)(\\d{4}-\\d{2}-\\d{2}).*',
        '{"name":"","date":"","energy":""}',
        '能耗報告'
    ),
    (
        '定額',
        'SMS_119076277',
        '.*(定額)值*[::]*([\\d.]+).*\\(([^)]+)\\)(\\d{4}-\\d{2}-\\d{2}).*',
        '{"name":"","date":"","energy":""}',
        '能耗報告'
    ),
    (
        '基準',
        'SMS_119076277',
        '.*(基準)值*[::]*([\\d.]+).*\\(([^)]+)\\)(\\d{4}-\\d{2}-\\d{2}).*',
        '{"name":"","date":"","energy":""}',
        '能耗報告'
    ),
    (
        '節能量',
        'SMS_119076277',
        '.*(節能量)值*[::]*([\\d.]+).*\\(([^)]+)\\)(\\d{4}-\\d{2}-\\d{2}).*',
        '{"name":"","date":"","energy":""}',
        '能耗報告'
    ),
    (
        '優化',
        'SMS_119076277',
        '.*(優化)值*[::]*([\\d.]+).*\\(([^)]+)\\)(\\d{4}-\\d{2}-\\d{2}).*',
        '{"name":"","date":"","energy":""}',
        '能耗報告'
    ),
    (
        '報警',
        'SMS_119076278',
        '(建築\\[)*(.+?)([\\],,])*產生以下報警:(.+)(【紫衡技術】)',
        '{"name":"","date":"","alarm":""}',
        '能管系統報警'
    ),
    (
        '運維通知',
        'SMS_119091206',
        '您有一條新的(.+)工單需處理【工單號[::]([^】]+).+',
        '{"type":"","code":""}',
        '運維繫統'
    ),
    (
        '運維搶單',
        'SMS_119076276',
        <

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、安裝supervisor 運行命令 yum install supervisor 一、配置supervisor 1、運行命令創建文件夾 mkdir -p /etc/supervisor/conf.d/ 2、運行命令創建配置文件 echo_supervisord_conf > /etc/super ...
  • 什麼是Mock 當對代碼進行測試的時候, 我們經常需要用到一些模擬(mock)技術. 綠色的是需要被測試的類, 黃色是它的依賴項, 灰色的無關的類 在一個項目里, 我們經常需要把某一部分程式獨立出來以便我們可以對這部分進行測試. 這就要求我們不要考慮項目其餘部分的複雜性, 我們只想關註需要被測試的那 ...
  • 前言 上一篇博客中我們可以得知通過Swagger插件可以很方便的提供給介面開發者線上調試,但是實際上Swagger附帶的功能還有很多, 比如使用NSwag生成客戶端調用代碼,進一步解放介面開發者。 NSwag NSwag是一個發佈在GitHub上的開源項目,它可以根據Swagger說明頁上的swag ...
  •  Asp.Net Core Web Api圖片上傳及MongoDB存儲實例教程(一) 圖片或者文件上傳相信大家在開發中應該都會用到吧,有的時候還要對圖片生成縮略圖。那麼如何在Asp.Net Core Web Api實現圖片上傳存儲以及生成縮略圖呢?今天我就使用MongoDB作為圖片存儲,然後使用S ...
  • 吃飯/訓覺-工作室尊重並保護所有使用其應用的用戶的個人隱私權。為了給您提供更準確、更有個性化的服務,吃飯/訓覺-工作室會按照本隱私權政策的規定使用和披露您的個人信息。但吃飯/訓覺-工作室將以高度的勤勉、審慎義務對待這些信息。除本隱私權政策另有規定外,在未徵得您事先許可的情況下,吃飯/訓覺-工作室不會 ...
  • 介紹 不管是新手還是工作幾年的老油條,對try{}catch{}來說是不陌生的。他可以來幫助我們獲取異常信息,在try中的代碼出現錯誤,火災catch代碼塊中被捕獲到。官方也給了詳細的解釋:。 拋出異常時,公共語言運行庫(CLR)會查找catch處理此異常的語句。如果當前正在執行的方法不包含這樣的c ...
  • 步驟:以VS2015為例, 第一步,右鍵解決方案後 點擊【管理解決方案的NuGet程式包(N)...】,找到【log4net】下載安裝,如下圖: 第二步:安裝完成後,在AssemblyInfo.cs代碼中 加入以下代碼: 如下圖: 第三步:新建log4net.config,內容如下: 第四步:新建公 ...
  • 在開發者界面用可以看到很多ptqrlogin開頭的 name 我要做的就是 模擬瀏覽器的操作,把它轉換成我們自己的客戶端。所以只要是瀏覽器里有的我們都要模擬。接下來判斷二維碼失效,兩秒一次吧,弄一個Timer smart 類 #region 第二講檢查二維碼狀態 private static Sys ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...