正则表达式
正则表达式是一种用来描述正则语言的更紧凑的表达方法
e.g.r=a(a∣b)∗(ϵ∣(.∣)(a∣b))r=a(a|b)^*(\epsilon|(.|\\_ )(a|b))r=a(a∣b)∗(ϵ∣(.∣)(a∣b))
正则表达式可以由较小的正则表达式按照特定的规则递归地构建。每个正则表达式定义的语言记作 L(r)。
正则表达式的定义
空字符是一个正则表达式,则L(ϵ)=ϵL(\epsilon) = \\{\epsilon\\}L(ϵ)=ϵ
属于字母表中的字母 a为一个正则表达式,则L(a)=aL(a) = \\{a\\}L(a)=a
假设 r 和 s 都是正则表达式,表示的语言分别是 L(r)和 L(s)
则:
(1)r|s 是一个正则表达式:L(r|s)=L(r)并 L(s)
(2)rs 是一个正则表达式,L(rs) = L(r)L(s)
(3)r是正则表达式,其语言等于 r 语言的闭包
(4)(r)的语言就是 r 的语言
这四个运算的优先级从高到低分别是:,连接,|
e.g.
∑=a,b\sum = \\{a,b\\}∑=a,b
L(a|b) ={a,b}
L((a|b)(a|b))={aa,ab,ba,bb}
L(a*) = (L(a))** = {a}* = {epsilon,a,aa,…}
十进制整数:(1|…|9)(0|…|9)|0
八进制整数:0(1|…|7)(0|…|7)
正则语言
可以用正则表达式定义的语言叫做正则语言
正则表达式的代数定律
(1)|具有交换律结合律
(2)连接具有结合律
(3)连接对|具有分配律
(4)epsilon 可以作为连接的单位元:ϵs=sϵ=s\epsilon s = s \epsilon = sϵs=sϵ=s
(5)闭包中一定包含 epsilo