码迷,mamicode.com
首页 > 其他好文 > 详细

学习正则表达式

时间:2017-10-31 18:55:26      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:正则表达式   设计   color   匹配   col   不能   回顾   style   细节   

原文:编程珠玑番外篇-C.正则表达式精义-1

 

先解耦

 

一个字符串是一个正则表达式, 比如 aaa

两个正则表达式可以直接串起来, 比如 aaabbb。 其实, 是由六个正则表达式 a a a b b b 接起来组成的.

aaa|bbb  这个集合里面有 {aaa, bbb} 两个字符串.

正则表达式最基本的思维方式: 用一个表达式, 去描述一类字符串(或者说, 一个集合).

 

如何描述无限的集?

 a* 描述了一个或者多个 a

 a | b*  描述了 a 和 b, bb, bbb 等.

(a|b)*    a|b 就变成一个整体, 描述了 a 或者 b, 描述了一切只由 a, b 组成的字符串

ab*c 也描述了 ac, 因为中间可以有 0 个 b

(a|o)(n|ff)   描述了 an, aff, on, off

 

回顾一下正则表达式的要点:

1. 正则表达式由普通的字符, 以及几个特殊的字符, 即 括号 (), 或者 | 和 星号 * 组成. 用来描述一类字符.
2. | 表示或者. 如果有两个正则表达式 X 和 Y, 那么 X|Y 就描述了原来 X 描述的和 Y 描述的.
3. 正则表达式可以接起来, 变成一个更长的, 描述了一个各个部分被那些被接起来的正则表达式描述的字符串.
4. () 是为了避免歧义.

好了, 恭喜您, 您已经学会正则表达式了


 

在线测试正则表达式

练习:

1. 字符串 2009

2. 周曙光同学有两个名字, 分别叫做 zola 和 zuola, 人们常常混淆. 请帮周曙光同学设计一个正则表达式, 可以帮他匹配自己的名字.

3. 二进制数字 (最少有一位, 但只含有 0 或者 1的)

4. 非零的十进制数字 (有至少一位数字, 但是不能以0开头)

答案:

1. 2009
2. z(|u)ola [或者您可以写成 zuola|zola]
3. (0|1)(0|1)*
4. (1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*

你会看到第四题的答案很笨拙, 居然写了这么长. 后面的大部分细节, 就是为了诸如此类的写得更加简洁一点.

扩展

 

学习正则表达式

标签:正则表达式   设计   color   匹配   col   不能   回顾   style   细节   

原文地址:http://www.cnblogs.com/liyonghua/p/7762672.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!