标签:正则表达式 设计 color 匹配 col 不能 回顾 style 细节
先解耦
一个字符串是一个正则表达式, 比如 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