高级应用,面向对象程序设计进阶

[.net 面向对象程序设计进级] (2) 正则揭橥式 (二)  高档应用

[.net 面向对象程序设计进级] (2) 正则表明式(三) 表明式帮手 

[.net 面向对象程序设计进级] (2) 正则表达式(三) 表明式帮手 

 
 上一节大家聊到了C#利用正则表明式的两种方式(Replace,Match,Matches,IsMatch,Split等),还应该有正则表明式的三种元字符及其使用实例,这几个都以上学正则表明式的基础。本节,我们传承深远学习表明式的二种复杂的用法。

      上边两节对正则表明式的选拔及.NET下采用正则表明式作了详实表明,本节首要搜聚整理了常用的正则表明式提供参谋。 

      下面两节对正则表明式的使用及.NET下使用正则表明式作了详实表达,本节首要搜聚整理了常用的正则表明式提供参谋。 

 1.分组 

     
其余为了使用方便,编写了三个《正则表明式帮手》方便测验正则表明式。 

     
其它为了使用方便,编写了贰个《正则表明式助手》方便测量试验正则表明式。 

用小括号来钦命子表明式(也叫做分组) 

1.正则表达式帮手 

1.正则表明式助手 

小编们透过前一节的上学,知道了再也单个字符,只供给在字符前边加上限定符就能够了, 

高级应用,面向对象程序设计进阶。1.1 软件概述

1.1 软件概述

举个例子 a{5},假诺要双重三个字符,就要接纳小括号分组,然后在后头加上限定符,下边我们看八个演示。 

软件名称:

《正则表达式助手》

版本:

2.0

最后更新日期:

2015/07/01 14:01:01

作者:

YuBinfeng

运行环境:

.NET Framework 4.6及以上(常用表达式功能,需要联网,从博客园本贴中获取数据)

作者博客:

http://www.cnblogs.com/yubinfeng/p/4609281.html

技术交流QQ群:

467189533

下载地址:(点击下载)

http://files.cnblogs.com/files/yubinfeng/正则表达式助手2.0.rar

软件名称:

《正则表达式助手》

版本:

3.5

最后更新日期:

2015/07/04 09:22:00

作者:

YuBinfeng

运行环境:

.NET Framework 4.0及以上(常用表达式功能,需要联网,从博客园本贴中获取数据)

作者博客:

http://www.cnblogs.com/yubinfeng/p/4612670.html

技术交流QQ群:

467189533

下载地址:(点击下载)

http://files.cnblogs.com/files/yubinfeng/正则表达式助手3.5.rar

示例一:再也单字符 和 重复分组字符

1.2 更新记录

1.2 更新记录

//示例:重复单字符 和 重复分组字符  //重复 单个字符  Console.WriteLine("请输入一个任意字符串,测试分组:");  string inputStr = Console.ReadLine();  string strGroup1 = @"a{2}";  Console.WriteLine("单字符重复2两次替换为22,结果为:"+Regex.Replace(inputStr, strGroup1,"22"));  //重复 多个字符 使用(abcd){n}进行分组限定  string strGroup2 = @"(ab\w{2}){2}";  Console.WriteLine("分组字符重复2两次替换为5555,结果为:" + Regex.Replace(inputStr, strGroup2, "5555"));

    2015/07/01 14:01:01   Version 2.0

    2015/07/04 09:22:00   Version 3.5

运维结果如下:

          更新汽车车牌号码匹配、小车电动机号相称、颜色值相称

          修复未联网时,展开应用程序出错的难题。       

图片 1

          修复常用列表有时会冒出索引值不设有的BUG。

    2015/07/01 20:00:00   Version 3.1

示例二:校验IP4地址(如:192.168.1.4,为四段,每段最多三位,每段最大数字为255,况且第一个人不可能为0) 

1.3 帮手使用表明 

          增加输入框右键菜单

//示例:校验IP4地址(如:192.168.1.4,为四段,每段最多三位,每段最大数字为255,并且第一位不能为0)  string regexStrIp4 = @"^(((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?))$";  Console.WriteLine("请输入一个IP4地址:");  string inputStrIp4 = Console.ReadLine();  Console.WriteLine(inputStrIp4 + " 是否为合法的IP4地址:" + Regex.IsMatch(inputStrIp4, regexStrIp4));  Console.WriteLine("请输入一个IP4地址:");  string inputStrIp4Second = Console.ReadLine();             Console.WriteLine(inputStrIp4 + " 是否为合法的IP4地址:" + Regex.IsMatch(inputStrIp4Second, regexStrIp4));

正则表明式帮手首要有两措施的效果与利益: 

          扩张输入错误表达式,实践后,提醒错误消息。

 运维结果如下:

A.一是足以实践查询和替换二种相配形式 

    2015/07/01 14:01:01   Version 2.0

图片 2

B.二是因而联网(重要是由此天涯论坛本贴子的换代数据,加载常用的正则表达式,方便贴子和软件同步) 

          更新汽车车牌号码相称、汽车斯特林发动机号相配、颜色值相配

在这么些正则表明式中,我们必要精晓 2[0-4]\d|25[0-5]|[01]?\d\d?

1.4 软件介绍 

          修复常用列表不经常会并发索引值海市蜃楼的BUG。

那有的意味一个四个人数的二种方式

1.3.1 主界面 

   

2[0-4]\d     表示:2开头+0~4的壹个人数字+狂妄数

 图片 3

1.3 帮手使用表明 

25[0-5]      表示:25开头+0~5的一位数字

 1.3.2 自动接入小编的博客同步获取最新“常用正则表明式” 

正则表明式帮手首要有双方法的作用: 

[01]?\d\d?  代表:0或1或空  +  壹个人大肆数字  +  一个人任性数或空

 图片 4

A.一是足以实践查询和替换二种相配情势 

这两种样式利用|分开,表示择一种相称

 1.3.3 点击常用列表,能够将正则表明式参与到调节和测量试验窗口 

B.二是因此联网(首即便通过微博本贴子的更新数据,加载常用的正则表明式,方便贴子和软件同步) 

精通了这段,全体就精通了,前半部分为 重复二次带.号,前边贰个不带.号

 图片 5

1.4 软件介绍 

^ 和 $ 表示十二分全部的初阶和得了

 1.3.4 援协助调查找和替换二种方式,表达式选项补助忽略大小写、单行情势、多行格局、忽略空白和显式方式等种种。 

1.3.1 主界面 

2. 后向援用

 图片 6

 图片 7

在那节从前,仍旧相比好精通的,这段有一些难以知晓了,不过大家还得拍拍脑袋继续学习。

 1.3.4 关于软件更新,当有新本虎时张开软件会有提示,也得以积极下载新版本 

 1.3.2 自动衔接小编的博客同步获取最新“常用正则表明式” 

先不说后向援引是甚,我们先说,后向引用能干啥?

 图片 8

 图片 9

前方我们说了分组的定义,正是在正则表明式中央银行使小括号()实现分组,后向援用便是本着分组的。

 2.常用正则表明式

 1.3.3 点击常用列表,能够将正则表达式参与到调节和测量检验窗口 

只要前方分组现在,前面还要寻找后边分组内同样的内容,就用到了后向援引,意思正是背后援用后边的分组之意。

常用正则表明式(时有时无整理中)

 图片 10

…………………………………………………………………容作者喘口气…………………………………………………………………………………………

校验数字类

 1.3.4 匡协助调查找和替换二种格局,表明式选项协理忽略大小写、单行形式、多行情势、忽略空白和显式格局等各样。 

这便是说要如何在末端引用前面分组呢?

序号

 图片 11

此地就需求有一个组名,即定义贰个组名,在背后引用。

说明

 1.3.4 关于软件更新,当有新本鸡时展开软件会有提示,也足以主动下载新版本 

在概念组名前,说一下

正则表明式

 图片 12

正则对于分组的工作原理:

1

 2.常用正则表明式

A.分组后,正则会自动为各样分组编多少个组号

正数字

常用正则表达式(陆陆续续整理中)

B.分配组号时,从左往右扫描一次,第贰次给未命名分组分配组号,第三次自然是给命名组分配组号。因而,命名组的组号是凌驾未命名组的组号。(说那几个专门的工作规律,对我们运用后向援用未有何样意义,就是清楚一下,内部专门的学业规律而已)

^[0-9]*$

校验数字类

C.亦不是兼具的组都会分配组号,大家能够使用(:?exp)来禁止分配组号。 

2

序号

不知情小同伙们是还是不是看掌握了,至少自身看了网络有关那块儿的牵线,都不是很明显。

n位的数字

说明

上面先看一下后向引用 捕获 的定义

^\d{n}$

正则表明式

分类

3

1

代码/语法

最少n位的数字

正数字

说明

^\d{n,}$

^[0-9]*$

捕获

4

2

(exp)

m-n位的数字

n位的数字

匹配exp,并抓获文本到机关命名的组里

^\d{m,n}$

^\d{n}$

(?<name>exp)

5

3

相配exp,并抓获文本到名称叫name的组里,也得以写成(?’name’exp)

零和非零开端的数字

起码n位的数字

(?:exp)

^(0|[1-9][0-9]*)$

^\d{n,}$

相称exp,不抓获相称的文书,也不给此分组分配组号

6

4

 先来对地点的八个语法掌握一下:

非零从头的最多带两位小数的数字

m-n位的数字

(exp) 就是分组,使用() ,exp正是分组内的子表达式 ,这几个在地方分组中一度证实了

^([1-9][0-9]*)+(.[0-9]{1,2})?$

^\d{m,n}$

(?<name>exp)或 (?’name’exp) 正是组分组命名,只是有三种写法而已

7

5

(?:exp)exp表明式不会被抓获到有个别组里,也不会分配组号,但不会转移正则管理形式,分明相当多小盆友要问,为何要有其一事物,要她何用?

带1-2位小数的正数或负数

零和非零初叶的数字

世家看一下上边那个示例:

^(\-)?\d+(\.\d{1,2})?$

^(0|[1-9][0-9]*)$

^([1-9][0-9]*|0)$  代表相称0-9的莫西干发型

8

6

再看上边那个

正数、负数、和小数

非零从头的最多带两位小数的数字

^(?:[1-9][0-9]*|0)$ 也是相称0-9的整数,不过利用了非捕获组

^(\-|\+)?\d+(\.\d+)?$

^([1-9][0-9]*)+(.[0-9]{1,2})?$

作用呢?两个字:效率

9

7

因为大家定义了组,不过大家只是为了采纳组来限制范围早先和终结,实际不是为着后向引用,由此选取非捕获组来禁上分红组号和保存到组里,一点都不小的拉长了寻觅功效。

有两位小数的正实数

带1-2位小数的正数或负数

有了上边包车型客车通晓,笔者才好写点示例,先理论后实行。 

^[0-9]+(.[0-9]{2})?$

^(\-)?\d+(\.\d{1,2})?$

在开始展览身先士卒前,大家先复习以下上节学到的元字符

10

8

   *  
 相配前边的子表达式自便次。举例,zo* 能匹配“z”,“zo”以及“zoo”。*等价于{ 0,}。

有1~3位小数的正实数

正数、负数、和小数

   +  
 相配前面包车型客车子表明式二次或频仍(大于等于1次)。例如,“zo +”能相称“zo”以及“zoo”,但不可能同盟“z”。+等价于{ 1,}。

^[0-9]+(.[0-9]{1,3})?$

^(\-|\+)?\d+(\.\d+)?$

   ?  
 相配前边的子表明式零次或一次。举例,“do (es) ?”能够包容“do”或“does”中的“do”。?等价于{ 0,1}。  

11

9

   \w
 相称包含下划线的别样单词字符。类似但不等价于“[A-Za-z0-9_]”,这里的”单词”字符使用Unicode字符集。

非零的正整数

有两位小数的正实数

   \b
 相配叁个单词边界,也正是指单词和空格间的地点(即正则表明式的“相称”有三种概念,一种是相配字符,一种是相称岗位,这里的\b就是相称岗位的)。举个例子,“er\b”能够相配“never”中的“er”,但无法相称“verb”中的“er”。       

^[1-9]\d*$

^[0-9]+(.[0-9]{2})?$

   \s
 相称任何不可知字符,包含空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。

12

10

//后向引用    //在后向引用前,我们先熟悉一下单词的查找    //复习一下前面学的几个元字符  // * 匹配前面的子表达式任意次。例如,zo* 能匹配“z”,“zo”以及“zoo”。*等价于{ 0,}。  // + 匹配前面的子表达式一次或多次(大于等于1次)。例如,“zo +”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{ 1,}。  // ? 匹配前面的子表达式零次或一次。例如,“do (es) ?”可以匹配“do”或“does”中的“do”。?等价于{ 0,1}。    // \w 匹配包括下划线的任何单词字符。类似但不等价于“[A-Za-z0-9_]”,这里的"单词"字符使用Unicode字符集。  // \b 匹配一个单词边界,也就是指单词和空格间的位置(即正则表达式的“匹配”有两种概念,一种是匹配字符,一种是匹配位置,这里的\b就是匹配位置的)。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”。         // \s 匹配任何不可见字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。  string str1 = "zoo zoo hello how you mess ok ok home house miss miss yellow";    //示例一:查找单词中以e结尾的,并将单词替换为了*  string regexStr1 = @"\w+e\b";  Console.WriteLine("示例一:" + Regex.Replace(str1, regexStr1,"*"));    //示例二:查询单词中以h开头的,并将单词替换为#  string regexStr2 = @"\bh\w+";  Console.WriteLine("示例二:" + Regex.Replace(str1, regexStr2, "#"));    //示例三:查找单词中有重叠ll的单词,将单词替换为@  string regexStr3 = @"\b\w+l+\w+\b";  Console.WriteLine("示例三:" + Regex.Replace(str1, regexStr3, "@"));

非零的负整数

有1~3位小数的正实数

另外,大家提起了分组及数码,那么怎么着取到有个别分组的相配文本呢?

^-[1-9]\d*$

^[0-9]+(.[0-9]{1,3})?$

使用 \1 表示取第八个分组的相称文本 

13

11

//使用 \1 代表第一个分组 组号为1的匹配文本  //示例四:查询单词中有两个重复的单词,替换为%    string regexStr4 = @"(\b\w+\b)\s+\1";  Console.WriteLine("示例四:" + Regex.Replace(str1, regexStr4, "%"));  //上面示例中,第一个分组匹配任意一个单词 \s+ 表示任意空字符 \1 表示匹配和第一个分组相同

非负整数

非零的正整数

 小名定义 (?<name>exp)  ,外号后向引用 \k<name> 

^\d+$

^[1-9]\d*$

//使用别名 代替 组号 ,别名定义 (?<name>exp)  ,别名后向引用 \k<name>  //示例五:使用别名后向引用 查询 查询单词中有两个重复的单词,替换为%%    string regexStr5 = @"(?<myRegWord>\b\w+\b)\s+\k<myRegWord>";  Console.WriteLine("示例五:"+Regex.Replace(str1, regexStr5, "%%"));

14

12

 运营结果如下:

非正整数

非零的负整数

图片 13

^-[1-9]\d*|0$

^-[1-9]\d*$

相关文章