C#正则表达式开源工具

 

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

v0.写在前面

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

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

v1.源码地址


https://github.com/toutouge/TouTou.RegexTool

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>匹配结果trueURL反之不是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

转载于:https://www.cnblogs.com/Percy_Lee/p/5109535.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430981.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python中代理模式分为几种_Python设计模式之代理模式实例详解

本文实例讲述了Python设计模式之代理模式。分享给大家供大家参考&#xff0c;具体如下&#xff1a;代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问#!/usr/bin/env python# -*- coding:utf-8 -*-__author__ Andy"""大话设计模式设计模式…

php编译称opcode文件,PHP源码保护和性能加速

什么是Opcache?每一次执行 PHP 脚本的时候&#xff0c;该脚本都需要被编译成字节码&#xff0c;而 Opcache 可以对该字节码进行缓存&#xff0c;这样&#xff0c;下次请求同一个脚本的时候&#xff0c;该脚本就不需要重新编译&#xff0c;这极大节省了脚本的执行时间&#xff…

PHP的pm、pm.max_requests、memory_limit

1、php-fpm.conf中的pm pm是来控制php-fpm的工作进程数到底是一次性产生固定不变&#xff08;static&#xff09;还是在运行过程中随着需要动态变化&#xff08;dynamic&#xff09;。众所周知&#xff0c;工作 进程数与服务器性能息息相关&#xff0c;太少则不能及时处理请求&…

结构体数组排序

要求&#xff1a;结构体变量中有两个数据&#xff0c;一个是index&#xff0c;另一个是max 按照index的从小到大的顺序排序。 struct student { int index; double max; }seq[length]; void _seq() {int i,j,k,tmp;double tmp_2;for(i0;i<length;i){ki;for(ji1;j<length;…

9553下载站java,java se development kit11最新版 64位

java se development kit11&#xff0c;简称java11&#xff0c;是一款专门进行java开发的编程软件&#xff0c;这款软件还拥有applet和组件的开发环境等操作&#xff0c;是程序员们进行java开发的飞铲不错软件&#xff0c;如果你喜欢这款软件&#xff0c;那就来下载基本介绍自从…

python源码编译 mingw_在windows上用gcc(mingw32)从命令行编译Cython扩展

我正在尝试在win32上测试一个小的cython模块&#xff0c;但是我在构建它时遇到了困难。在文件名为linalg_赛顿.pyx包括以下内容&#xff1a;from __future__ import absolute_import, division, print_functionimport numpy as npcimport numpy as npimport cython#cython.boun…

php ldap支付,php – 实现LDAP合规性

我正在专门研究一个包含联系人和其他数据的php Web应用程序.我想知道使用LDAP协议将这些数据提供给外部程序有多难.那里有专门的工具吗&#xff1f;我真的找不到任何东西,但我无法想象我是第一个想到这一点的人.编辑1&#xff1a;我正在寻找的是让应用程序(如邮件客户端)能够使…

java sleep方法_一文搞懂 Java 线程中断!

在之前的一文《如何”优雅”地终止一个线程》详细说明了 stop 终止线程的坏处及如何优雅地终止线程&#xff0c;那么还有别的可以终止线程的方法吗&#xff1f;答案是肯定的&#xff0c;它就是我们今天要分享的——线程中断。下面的这断代码大家应该再熟悉不过了&#xff0c;线…

java 观察者模式_图解Java设计模式之观察者模式

图解Java设计模式之观察者模式天气预报项目需求天气预报设计方案 1 - 普通方案观察者模式&#xff08;Observer&#xff09;原理观察者模式解决天气预报需求观察者模式在JDK应用的源码分析天气预报项目需求1&#xff09;气象站可以将每天测量到的湿度、温度、气压等等以公告的形…

matlab中mapshow,函数式编程 - MATLAB中的Map函数?

函数式编程 - MATLAB中的Map函数&#xff1f;我对MATLAB没有地图功能感到有些惊讶&#xff0c;所以我自己一起攻击了一个&#xff0c;因为它是我无法生存的东西。 那里有更好的版本吗&#xff1f; 有没有一个有点标准的MATLAB函数式编程库我缺少&#xff1f;function results …

linux 定时java程序,Linux操作系统上定时运行Java程序的方法

运行crontab -e编辑一个job。例如0 30 * * * /home/your_login/bin/java_PRogram | | | | | | | | | | | | | | —day of the week (0-6 with 0Sunday). | | | —— month of the year (1-12), | | |_____day of the month (1-31), | | | |____hour (0-23), | minute (0-59),更…

怎么在同一页中分页_分库分表业界难题,跨库分页的几种常见方案

为什么需要研究跨库分页&#xff1f;互联网很多业务都有分页拉取数据的需求&#xff0c;例如&#xff1a;(1)微信消息过多时&#xff0c;拉取第N页消息&#xff1b;(2)京东下单过多时&#xff0c;拉取第N页订单&#xff1b;(3)浏览58同城&#xff0c;查看第N页帖子&#xff1b;…

content add tpl.php,phpcms后台批量上传添加图片文章方法详解(一)

注&#xff1a;以下所有代码中&#xff0c;红色部分为增加部分。一、在后台增加批量添加按钮打开“phpcms\modules\content\templates\content_list.tpl.php”文件搜索“$category[‘catname‘]));?>”在这句话的后天的添加&#xff1a;a echo"" href":;&q…

sap 供应商表_财务人员学习SAP的路线图

有许多网友在公众号给我们留言&#xff0c;咨询财务人员学习SAP的事情&#xff0c;如何才能快速掌握SAP&#xff0c;有没有捷径什么的。今天就给大家分享一下财务人员学习SAP的经验&#xff0c;希望能够为财务人员揭开SAP神秘的面纱&#xff0c;学习SAP少走弯路。刚接触SAP的财…

nodejs搭配phantomjs highcharts后台生成图表

简单分享一下&#xff0c;后台使用nodejs结合highcharts、phantomjs生成报表图片的方法。这主要应用在日报邮件。 主要参考以下资料&#xff1a; http://www.highcharts.com/component/content/article/2-news/52-serverside-generated-charts#phantom_usagehttps://bitbucket.…

mysql4函数,mysql笔记4_函数_MySQL

常用函数&#xff1a;concat 连接函数 Lower 转小写 upper 转大写 Length 长度 substr 子串 now 当前时间 Year 当前年份...流程函数&#xff1a;ifnull(column,result1,result2) 判定字段为空则返回result2&#xff0c;不为空则result1。case...when...then...else...end 分支…

python实战扫码下载_实例:用 Python 做一个扫码工具

原标题&#xff1a;实例&#xff1a;用 Python 做一个扫码工具来自公众号&#xff1a; 新建文件夹X链接&#xff1a;https://blog.csdn.net/ZackSock/article/details/108610957Python实现扫码工具二维码作为一种信息传递的工具&#xff0c;在当今社会发挥了重要作用。从手机用…

前端小问题4

爱、喜悦、和平。 1、文字一个一个显示 js代码 <script type"text/javascript">window.οnlοadfunction(){var story document.getElementById(sto);var s document.getElementById(show);var a story.innerHTML.slice("");var i 0;timersetInt…

matlab解带参数的积分方程组,方程组求解问题:方程组中有带参数的积分函数,求参数...

吴老师&#xff0c;您好&#xff01;请教您一个问题。我想求下面方程组的解&#xff1a;quadl((x) exp(a(1)a(2)*xa(3)*x.^2a(4)*x.^3a(5)*x.^4),-100,100)-1;quadl((x) x.*exp(a(1)a(2)*xa(3)*x.^2a(4)*x.^3a(5)*x.^4),-100,100)-m1;quadl((x) x.^2.*exp(a(1)a(2)*xa(3)*x.^2a…

vue 页面切换动画_Flutter Hero动画让你的APP页面切换充满动效 不一样的体验 不一样的细节处理...

优美的应用体验 来自于细节的处理&#xff0c;更源自于码农的自我要求与努力&#xff0c;当然也需要码农年轻灵活的思维。本文章实现的Demo效果&#xff0c;如下图所示&#xff1a;class HeroHomePage extends StatefulWidget { override _TestPageState createState() > …