先交代一下背景,最近工作中经常用到正则表达式,而正则表达式这个东西我个人觉得很鸡肋,不用吧,有些功能实现起来会很麻烦。用吧,又不是说工作中经常用到,只是有时候有些需要求用到而已。但是正则表达式只要一段时间不用,就会被遗忘,甚至是忘的一干二净。为了一定程度上解决这个鸡肋的问题,就有了这篇博客和我打算写的这个开源的正则表达式验证工具的想法。关于正则网上的资料其实已经很多了,之所以还写这篇博客只是为了记录一些现在或者以后工作中可能会用到的正则,然后分享出来,同时也是希望为.net开源做一些事情。

 

v0.写在前面

记得上一次正儿八经的用正则表达式还是三年前,虽然期间也零零散散的用过一些,但是基本已经忘的差不多了,所以这篇博客中如果有什么不对的地方欢迎和感谢大家指正!这里我只是写出了一些个人工作中常用到的正则匹配,如果同时有园友愿意贡献一份力量参与到正则开源工具的编码中,我会非常欢迎。

最近园子里的"月经贴"越来越多,我就很纳闷,这群人是不是闲的蛋疼?你有时间在这"指点江山"批评这个语言抨击那个环境的,你还不如张开双手拥抱.net开源大潮呢。随着.net开源的到来,.net的春天也来了,我们应该伸出双手为.net开源做一些事情,让.net社区越来越开源。当然这是题外话,那些月经贴也不关我啥事。

v1.源码地址

v2.正文开始

2.1.: 通用匹配

C#通用匹配规则,可以在调用的时候传入源字符串和对应的正则

/// <summary>

/// 检测字符串中是否包含符合正则的子集

/// </summary>

/// <param name="source">源字符串</param>

/// <param name="reg">正则, e.g. \d+</param>

/// <returns>true:包含,反之不包含</returns>

publicbool CheckContainsByReg(string source, string reg)

{

return Regex.Match(source, reg).Success;

}

/// <summary>

/// 检测整个字符串是否能匹配正则,而不是包含

/// </summary>

/// <param name="source">源字符串</param>

/// <param name="reg">正则, e.g. ^\d+$</param>

/// <returns>true:匹配,反之不匹配</returns>

publicbool CheckStringByReg(string source, string reg)

{

Regex rg = new Regex(reg, RegexOptions.IgnoreCase);

return rg.IsMatch(source);

}

/// <summary>

/// 从指定字符串中过滤出第一个符合正则匹配的子集

/// </summary>

/// <param name="source">源字符串</param>

/// <param name="reg">正则, e.g. \d+</param>

/// <returns>源字符串的第一个匹配的子集</returns>

publicstring GetFirstStringByReg(string source, string reg)

{

return Regex.Match(source, reg).Groups[0].Value;

}

/// <summary>

/// 从指定字符串中过滤出所有符合正则匹配的子集

/// </summary>

/// <param name="source">源字符串</param>

/// <param name="reg">正则, e.g. \d+</param>

/// <returns>true:匹配,反之不匹配</returns>

publicList<string> GetStringByReg(string source, string reg)

{

var regex = Regex.Matches(source, reg);

List<string> list =new List<string>();

foreach (Match item in regex)

{

list.Add(item.Value);

}

return list;

}

2.2.: 数字匹配

C#正则表达式根据各种需求匹配数字

/// <summary>

/// 从指定字符串中过滤出第一个数字

/// </summary>

/// <param name="source">源字符串</param>

/// <returns>源字符串的第一个数字</returns>

publicstring GetFirstNumberByString(string source)

{

return Regex. Match(source, @"\d+").Groups[0].Value;

}

/// <summary>

/// 从指定字符串中过滤出最后一个数字

/// </summary>

/// <param name="source">源字符串</param>

/// <returns>源字符串的最后一个数字</returns>

publicstring GetLastNumberByString(string source)

{

var reg = Regex.Matches(source, @"\d+");

return reg[reg.Count -1].Value;

}

/// <summary>

/// 从指定字符串中过滤出所有数字

/// </summary>

/// <param name="source">源字符串</param>

/// <returns>源字符串的所有数字</returns>

publicList<string> GetAllNumberByString( string source)

{

var reg = Regex.Matches(source, @"\d+");

List<string> list =new List<string>();

foreach (Match item in reg)

{

list.Add(item.Value);

}

return list;

}

/// <summary>

/// 检车源字符串中是否包含数字

/// </summary>

/// <param name="source">源字符串</param>

/// <returns>true:源字符串包含数字;false:源字符串不包含数字</returns>

publicbool CheckNumberByString(string source)

{

return Regex. Match(source, @"\d").Success;

}

/// <summary>

/// 判断字符串是否全部是数字且长度等于指定长度

/// </summary>

/// <param name="source">源字符串</param>

/// <param name="length">指定长度</param>

/// <returns>返回值</returns>

publicbool CheckLengthByString(string source, int length)

{

Regex rg = new Regex(@"^\d{" + length +"}$");

return rg.IsMatch(source);

}

2.3.: 正则截串

C#根据给定的起始字符截取起始之间的字符串

/// <summary>

/// 截取字符串中开始和结束字符串中间的字符串

/// </summary>

/// <param name="source">源字符串</param>

/// <param name="startStr">开始字符串</param>

/// <param name="endStr">结束字符串</param>

/// <returns>中间字符串</returns>

publicstring Substring(string source, string startStr, string endStr)

{

Regex rg = new Regex("(?<=(" + startStr +"))[.\\s\\S]*?(?=(" + endStr +"))", RegexOptions.Multiline |RegexOptions.Singleline);

return rg.Match(source).Value;

}

2.4.: 邮箱匹配

C#正则表达式匹配邮箱

/// <summary>

/// 匹配邮箱是否合法

/// </summary>

/// <param name="source">待匹配字符串</param>

/// <returns>匹配结果true是邮箱反之不是邮箱</returns>

publicbool CheckEmailByString(string source)

{

Regex rg = new Regex("^\\s*([A-Za-z0-9_-]+(\\.\\w+)*@(\\w+\\.)+\\w{2,5})\\s*$", RegexOptions.IgnoreCase);

return rg.IsMatch(source);

}

2.5.: URL匹配

C#正则表达式匹配URL

/// <summary>

/// 匹配URL是否合法

/// </summary>

/// <param name="source">待匹配字符串</param>

/// <returns>匹配结果true是URL反之不是URL</returns>

publicbool CheckURLByString(string source)

{

Regex rg = new Regex(@"^(https?|s?ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$" , RegexOptions.IgnoreCase);

return rg.IsMatch(source);

}

2.6.: 日期匹配

C#正则表达式匹配日期

/// <summary>

/// 匹配日期是否合法

/// </summary>

/// <param name="source">待匹配字符串</param>

/// <returns>匹配结果true是日期反之不是日期</returns>

publicbool CheckDateByString(string source)

{

Regex rg = new Regex(@"^(\d{4}[\/\-](0?[1-9]|1[0-2])[\/\-]((0?[1-9])|((1|2)[0-9])|30|31))|((0?[1-9]|1[0-2])[\/\-]((0?[1-9])|((1|2)[0-9])|30|31)[\/\-]\d{4})$");

return rg.IsMatch(source);

}

/// <summary>

/// 从字符串中获取第一个日期

/// </summary>

/// <param name="source">源字符串</param>

/// <returns>源字符串中的第一个日期</returns>

publicstring GetFirstDateByString(string source)

{

return Regex.Match(source,@"(\d{4}[\/\-](0?[1-9]|1[0-2])[\/\-]((0?[1-9])|((1|2)[0-9])|30|31))|((0?[1-9]|1[0-2])[\/\-]((0?[1-9])|((1|2)[0-9])|30|31)[\/\-]\d{4})").Groups[0].Value;

}

/// <summary>

/// 从字符串中获取所有的日期

/// </summary>

/// <param name="source">源字符串</param>

/// <returns>源字符串中的所有日期</returns>

publicList<string> GetAllDateByString( string source)

{

var all = Regex.Matches(source, @"(\d{4}[\/\-](0?[1-9]|1[0-2])[\/\-]((0?[1-9])|((1|2)[0-9])|30|31))|((0?[1-9]|1[0-2])[\/\-]((0?[1-9])|((1|2)[0-9])|30|31)[\/\-]\d{4})");

List<string> list =new List<string>();

foreach (Match item in all)

{

list.Add(item.Value);

}

return list;

}

2.7.: 密码匹配

C#正则表达式匹配密码

/// <summary>

/// 检测密码复杂度是否达标:密码中必须包含字母、数字、特称字符,至少8个字符,最多16个字符。

/// </summary>

/// <param name="source">待匹配字符串</param>

/// <returns>密码复杂度是否达标true是达标反之不达标</returns>

publicbool CheckPasswordByString(string source)

{

Regex rg = new Regex(@"^(?=.*\d)(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).{8,16}$");

return rg.IsMatch(source);

}

2.8.: 邮编匹配

C#正则表达式匹配邮编

/// <summary>

/// 匹配邮编是否合法

/// </summary>

/// <param name="source">待匹配字符串</param>

/// <returns>邮编合法返回true,反之不合法</returns>

publicbool CheckPostcodeByString(string source)

{

Regex rg = new Regex(@"^\d{6}$");

return rg.IsMatch(source);

}

2.9.: 电话号码

C#正则表达式匹配电话

/// <summary>

/// 匹配电话号码是否合法

/// </summary>

/// <param name="source">待匹配字符串</param>

/// <returns>电话号码合法返回true,反之不合法</returns>

publicbool CheckTelephoneByString(string source)

{

Regex rg = new Regex(@"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$");

return rg.IsMatch(source);

}

/// <summary>

/// 从字符串中获取电话号码

/// </summary>

/// <param name="source">源字符串</param>

/// <returns>源字符串中电话号码</returns>

publicstring GetTelephoneByString(string source)

{

return Regex. Match(source, @"(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}").Groups[0].Value;

}

2.10.: 手机号码

C#正则表达式匹配手机号码

/// <summary>

/// 匹配手机号码是否合法

/// </summary>

/// <param name="source">待匹配字符串</param>

/// <returns>手机号码合法返回true,反之不合法</returns>

publicbool CheckMobilephoneByString(string source)

{

Regex rg = new Regex(@"^[1]+[3,5,7,8]+\d{9}$");

return rg.IsMatch(source);

}

/// <summary>

/// 从字符串中获取手机号码

/// </summary>

/// <param name="source">源字符串</param>

/// <returns>源字符串中手机号码</returns>

publicstring GetMobilephoneByString(string source)

{

return Regex. Match(source, @"[1]+[3,5,7,8]+\d{9}").Groups[0].Value;

}

2.11.: 身份证匹配

C#正则表达式匹配身份证号码

/// <summary>

/// 匹配身份证号码是否合法

/// </summary>

/// <param name="source">待匹配字符串</param>

/// <returns>身份证号码合法返回true,反之不合法</returns>

publicbool CheckIDCardByString(string source)

{

Regex rg = new Regex(@"^(^\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$");

return rg.IsMatch(source);

}

/// <summary>

/// 从字符串中获取身份证号码

/// </summary>

/// <param name="source">源字符串</param>

/// <returns>源字符串中身份证号码</returns>

publicstring GetIDCardByString(string source)

{

return Regex.Match(source, @"(^\d{15}$|^\d{18}$|^\d{17}(\d|X|x))").Groups[0].Value;

}

v3.博客总结

关于C#正则表达式开源工具暂时就只积累了这么多。因为目前实际工作中遇到的也就这些,关于这个C#正则表达式开源工具现在只是一个雏形,先把这一分不分享出来,后续得会持续更新C#正则表达式开源工具。希望在以后这个C#正则表达式工具会越来越strong,更希望能得到园友们的support.

原文链接:http://www.cnblogs.com/toutou/p/regextool.html

C#正则表达式开源工具的更多相关文章

  1. C#正则表达式开源工具,为.net开源绵尽薄力

    先交代一下背景,最近工作中经常用到正则表达式,而正则表达式这个东西我个人觉得很鸡肋,不用吧,有些功能实现起来会很麻烦.用吧,又不是说工作中经常用到,只是有时候有些需要求用到而已.但是正则表达式只要一段 ...

  2. Web 项目可能会用到的20款优秀的开源工具

    开源的应用程序和它们的源代码可以免费获得,因为版权是属于任何进行过修改或者提交代码的人.大多数提供开源软件的公司都可以建立行业标准,因此可以获得有利的竞争优势. 很多的开源应用程序和工具都有很强的替代 ...

  3. GitHub 开源工具整理

    技术站点 Hacker News:非常棒的针对编程的链接聚合网站 Programming reddit:同上 MSDN:微软相关的官方技术集中地,主要是文档类 infoq:企业级应用,关注软件开发领域 ...

  4. 搭建正则开源工具Regexper

    一.Regexper简介 Regexper是一款正则可视化开源工具,直接输入正则表达式就能用可视化显示出来,方便的检测我们书写的正则是否正确. 二.Regexper地址在线版:https://rege ...

  5. C# 正则表达式测试工具与分享窗体自适应类

    放假刚回来,自己打算写一个正则表达式的测试工具,因为上次在网上用的一个在线正则表示测试工具就 没有很好的服务自己的,所以才有了现在的想法,想写一个C#开发者用的正则表达式测试工具!期间由于最大化时控件 ...

  6. 【转帖】四种BI 开源工具介绍-SpagoBI,openI,JasperSoft,Pentaho

    四种BI 开源工具介绍-SpagoBI,openI,JasperSoft,Pentaho 1 BI系统的简述 从技术角度来说 BI 包含了 ETL.DW.OLAP.DM等多环节.简单的说就是把交易系统 ...

  7. MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  8. 撑起大规模PHP网站的开源工具

    撑起大规模PHP网站的开源工具 百万级PHP站点Poppen.de的架构 在 2011年11月27日 那天写的     已经有 3957 次阅读了 感谢 参考或原文   服务器君一共花费了54.510 ...

  9. [Hadoop 周边] Hadoop和大数据:60款顶级大数据开源工具(2015-10-27)【转】

    说到处理大数据的工具,普通的开源解决方案(尤其是Apache Hadoop)堪称中流砥柱.弗雷斯特调研公司的分析师Mike Gualtieri最近预测,在接下来几年,“100%的大公司”会采用Hado ...

随机推荐

  1. PHP代码优化小笔记

    1.十万级以上次执行情况,方法可以被静态化,考虑声明为静态.html静态页面速度更快 2.echo 替换print:echo时逗号连接符替换点号连接符 3.循环之前设置循环最大次数,循环参数不要使用函 ...

  2. webpack3基础知识

    ## 本地化安装webpack ## 1. npm init //npm初始化生成package.json文件 2. npm install --save-dev webpack //安装webpac ...

  3. java属性为什么没多态,而是方法多态

    定义 java多肽的特性:方法具有多态性,属性却没有. 准备 基类: 子类: 测试类: 结果: 分析如下 父类 a=new 子类,实际对象时子类.由于向上转型,我们可以用父类在编译期间代替子类,使得编 ...

  4. Ubuntu下修改NAT模式的IP地址

    1,查看虚拟机的网段 在编辑->虚拟网络编辑器->NAT设置->网关 IP  可以查看到虚拟机的网关 如图 2,图形化设置: 图中 Netmask设置的是255.255.255.0 ...

  5. 之江学院第0届校赛 qwb去面试 (找规律)

    Description 某一天,qwb去WCfun面试,面试官问了他一个问题:把一个正整数n拆分成若干个正整数的和,请求出这些数乘积的最大值. qwb比较猥琐,借故上厕所偷偷上网求助,聪明的你能帮助他 ...

  6. keras_训练人脸识别模型心得

    keras_cnn_实现人脸训练分类 废话不多扯,直接进入正题吧!今天在训练自己分割出来的图片,感觉效果挺不错的,所以在这分享一下心得,望入门的同孩采纳. 1.首先使用python OpenCV库里面 ...

  7. python 实现定时循环触发某个方法

    直接贴上代码 import threading def sayhello(): print "hello world" global t #Notice: use global v ...

  8. python3 面向对象、类、继承、组合、派生、接口、子类重用父类方法

    对象是特征(变量)与技能(函数)的结合体而类是一系列对象共同的特征与技能的集合体 class teacher: lesson = "python" def __init__(sel ...

  9. Yeelight介绍

    1. 介绍 Yeelight是小米生态链中的WiFi智能灯泡,本文介绍它的接入和控制实现: Yeelight使用的是自定义的私有协议,该协议采用了类似SSDP的发现机制和基于JSON的控制命令 2. ...

  10. DECODE 与CASE WHEN 的比较以及用法

    1.DECODE 只有Oracle 才有,其它数据库不支持; 2.CASE WHEN的用法, Oracle.SQL Server. MySQL 都支持; 3.DECODE 只能用做相等判断,但是可以配 ...