正则表达式平时不常用,经常都是用的时候,临时抱佛脚,查文档,然后就是被各种坑之后,才会逐渐熟练。

在线正则表达式测试: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); //
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); //
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); //
rex = @".*(上周总?能耗)([0-9]{1,}[.]?[0-9]*)*度。 \((.*)\)(.{3}).*";
msg = "上周总能耗10922.4度。 (深圳市地方税务局第二稽查局)星期一【紫衡技术】";
m1 = Regex.Match(msg, rex);
Console.WriteLine("3:"+m1.Success);
WriteGroupInfo(m1); //
rex = @".*(上月总?能耗)([0-9]{1,}[.]?[0-9]*)*度。 \((.*)\)(.{8}).*";
msg = "上月总能耗49276.9度。 (深圳市地方税务局第二稽查局)2018年06月【紫衡技术】";
m1 = Regex.Match(msg, rex);
Console.WriteLine("4:"+m1.Success);
WriteGroupInfo(m1); //
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); //
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 > )
{
for (var i = ; 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

我想直接通过代码来自动将其迁移到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();
item = new SmsTemplate();
item.TemplateCode = reader.GetString();
item.TemplateReg = reader.GetString();
item.TemplateParam = (JObject)JsonConvert.DeserializeObject(reader.GetString());
item.SignName = reader.GetString();
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',
'您有一条新的(.+)工单(提示)*【工单号[::]([^】]+).+',
'{"type":"","code":""}',
'运维系统'
),
(
'运维派单',
'SMS_119076273',
'您有新的(.+)工单无人[抢|接]单【工单号[::]([^】]+).+',
'{"type":"","code":""}',
'运维系统'
),
(
'库存不足',
'SMS_119091203',
'.+【([^】]+)】.+库存已不足.+',
'{"type":"","code":""}',
'运维系统'
),
(
'维修签到',
'SMS_119076712',
'.*您有(.*)未签到【工单号:([^】]+)】.+',
'{"type":"","code":""}',
'运维系统'
),
(
'报警抢单',
'SMS_119091869',
'您有(.*)报警.*无人[抢|接]单【工单号[::]([^】]+).+',
'{"type":"","code":""}',
'运维系统'
),
(
'广医派工',
'SMS_135795374',
'您有新的(.+)工单(.+)需处理,详情请打开“智慧机电运维系统APP”查看。',
'{"type":"","code":""}',
'运维系统'
),
(
'报警签到',
'SMS_119081998',
'您有(.*)报警事件未现场签到【工单号[::]([^】]+).+',
'{"type":"","code":""}',
'运维系统'
),
(
'未处理完崔单',
'SMS_119076997',
'您有(.*)处理尚未完成【工单号[::]([^】]+).+',
'{"type":"","code":""}',
'运维系统'
),
(
'运维崔单',
'SMS_119087014',
'您有一条(.+)催单提示【工单号[::]([^】]+).+',
'{"type":"","code":""}',
'运维系统'
),
(
'运维工单事件',
'SMS_119091936',
'您有新的工单事件【工单号[::]([^】]+).+',
'{"type":"","code":""}',
'运维系统'
),
(
'MAN服务未找到异常',
'SMS_120120306',
'^【([^】]+)】异常(.+?)服务(【([^】]+)】未找到或者未安装!)*(服务【([^】]+)】未找到或者未安装!)*(服务【([^】]+)】未找到或者未安装!)*(服务【([^】]+)】未找到或者未安装!)*(服务【([^】]+)】未找到或者未安装!)*(服务【([^】]+)】未找到或者未安装!)*(服务【([^】]+)】未找到或者未安装!)*(服务【([^】]+)】未找到或者未安装!)*.+',
'{"type":"","code":""}',
'能管365'
)
JsonConvert.SerializeObject(v.Value.TemplateParam),把原来的对象进行序列化。
之前一直用的在线正则表达式匹配http://tool.oschina.net/regex/,不过发现不方便,于是我自己写了一个小工具。

源码下载:https://github.com/zouyujie/RegexTool
吐槽:阿里云的短信平台,短信模板中的单个变量长度不超过20个字符,而且还不支持组合变量,变量之间要用文字或者字符隔开,这样一来,假设我有需要发出去的变量文字是超过20个字符的,就不得不拆开,中间还要用字符或者汉字拆开,那么这样的话,客户收到的短信岂不是很奇葩,活生生的一些连续的描述文字被拆开了。
记录以备忘。

C# 正则表达式应用的更多相关文章

  1. JS正则表达式常用总结

    正则表达式的创建 JS正则表达式的创建有两种方式: new RegExp() 和 直接字面量. //使用RegExp对象创建 var regObj = new RegExp("(^\\s+) ...

  2. Python高手之路【五】python基础之正则表达式

    下图列出了Python支持的正则表达式元字符和语法: 字符点:匹配任意一个字符 import re st = 'python' result = re.findall('p.t',st) print( ...

  3. C# 正则表达式大全

    文章导读 正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串.正则表达式无疑是处理文本最有力的工具,而.NET提供的Regex类实现了验证正则表达式的方法.Regex 类表示不可变(只读)的 ...

  4. C#基础篇 - 正则表达式入门

    1.基本概念 正则表达式(Regular Expression)就是用事先定义好的一些特定字符(元字符)或普通字符.及这些字符的组合,组成一个“规则字符串”,这个“规则字符串”用来判断我们给定的字符串 ...

  5. JavaScript正则表达式,你真的知道?

    一.前言 粗浅的编写正则表达式,是造成性能瓶颈的主要原因.如下: var reg1 = /(A+A+)+B/; var reg2 = /AA+B/; 上述两个正则表达式,匹配效果是一样的,但是,效率就 ...

  6. Python 正则表达式入门(中级篇)

    Python 正则表达式入门(中级篇) 初级篇链接:http://www.cnblogs.com/chuxiuhong/p/5885073.html 上一篇我们说在这一篇里,我们会介绍子表达式,向前向 ...

  7. 【JS基础】正则表达式

    正则表达式的() [] {}有不同的意思. () 是为了提取匹配的字符串.表达式中有几个()就有几个相应的匹配字符串. (\s*)表示连续空格的字符串. []是定义匹配的字符范围.比如 [a-zA-Z ...

  8. JavaScript 正则表达式语法

    定义 JavaScript定义正则表达式有两种方法. 1.RegExp构造函数 var pattern = new RegExp("[bc]at","i"); ...

  9. [jquery]jquery正则表达式验证(手机号、身份证号、中文名称)

    数字判断方法:isNaN()函数 test()方法 判断字符串中是否匹配到正则表达式内容,返回的是boolean值 ( true / false ) // 验证中文名称 function isChin ...

  10. JS中给正则表达式加变量

    前不久同事询问我js里面怎么给正则中添加变量的问题,遂写篇博客记录下.   一.字面量 其实当我们定义一个字符串,一个数组,一个对象等等的时候,我们习惯用字面量来定义,例如: var s = &quo ...

随机推荐

  1. Oracle数据库备份及还原

    Oracle数据库备份 1:找到Oracle安装路径我的就是默认C盘  C:\app\wdjqc\admin\orcl\adump 2:执行文件:back.bat 文件内容如下: @echo off ...

  2. [Abp 源码分析]三、依赖注入

    0.简要介绍 在 Abp 框架里面,无时无刻不存在依赖注入,关于依赖注入的作用与好处我就不在这里多加赘述了,网上有很多解释的教程.在 [Abp 源码分析]一.Abp 框架启动流程分析 里面已经说过,A ...

  3. Java核心技术及面试指南 设计模式部分的面试题总结以及答案

    8.6.4.1请实现一个线程安全的单例模式. 1      public class MailListReader { 2          private static MailListReader ...

  4. java基础(十四)-----详解匿名内部类——Java高级开发必须懂的

    在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意的事项.匿名内部类使用的形参为何要为final. 使用匿名内部类内部类 匿名内部类由于没有名字,所以它的创建方式有点儿奇怪.创建格式如下: n ...

  5. 什么是LogDashboard?

    What is LogDashboard 接上篇 LogDashboard是可视化的日志面板,摆脱了传统查看txt与数据库的方式. 使查看日志变的简单方便并且可供分析 基于Net Core中间件编写适 ...

  6. 【SpringCloud】Zuul在何种情况下使用Hystrix

    首先,引入spring-cloud-starter-zuul之后会间接引入: hystrix依赖已经引入,那么何种情况下使用hystrix呢? 在Zuul的自动配置类ZuulServerAutoCon ...

  7. Spring基础系列-参数校验

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9953744.html Spring中使用参数校验 概述 ​ JSR 303中提出了Bea ...

  8. Linux基础命令第二天

    1,修改命令提示符 修改Linux命令行显示,需要用到PS1变量,PS1是Linux终端用户的一个环境变量.在终端输入命令:set,就会找到PS1变量,然后给PS1重新赋值,就会得到对应的样式. 默认 ...

  9. c# IO操作

    今天我们主要讨论的IO的一些操作,首先我们先引入三个变量: /// <summary> /// 配置绝对路径 /// </summary> private static str ...

  10. Python3.7 dataclass使用指南

    本文将带你走进python3.7的新特性dataclass,通过本文你将学会dataclass的使用并避免踏入某些陷阱. dataclass简介 dataclass的使用 定义一个dataclass ...