正则表达式

定义
- 对给定的字符集∑={c1 , c2 , … , cn}
- 归纳定义:
- 空串∑是正则表达式
- 对于任意c∈∑,c是正则表达式
- 如果M和N是正则表达式,则以下也是正则表达式
- 选择 M|N = {M,N}
- 连接 MN = {mn| m∈M , n∈N}
- 闭包 M* = {∑,M,MM,MMM,…}
对于给定的字符集∑={a,b},可以写出哪些正则表达式?
- {a,b} (空串∑是正则表达式)
- {a},{b} (对于任意c∈∑,c是正则表达式)
- {a,a},{b,b},{a,∑},{b,∑},{∑,∑} (选择)
- {∑a},{∑,b},{∑∑},{ab},…,{a(∑|a)} (连接)
- ∑,…, a(∑|a) (闭包)
关键字表示
正则表达式可以用来表示语法中的关键字
如 if
其中 i∈∑ 又 f∈∑
根据连接 if∈∑
标识符表示
C语言中的标识符:以字母或下划线开头,后跟零个或多个字母、数字或下划线
可以用正则表达式表示:
- (a|b|c|…|z|A|B|C|…|Z|_ ) (以字母或下划线开头)
- (a|b|c|…|z|A|B|C|…|Z|_|0|1|2|…|9 )* (后跟零个或多个字母、数字或下划线)
语法糖
- 可以引入语法糖来简化正则表达式
- [c1-cn] == c1|c2|…|cn
- e+ == 一个或多个e
- e? == 零个或一个e
- “a“ == a自身,不是a的Kleen闭包
- e{i,j} == i到j个e的连接
- · == 除’\n’外的任意字符

