第二节.正则表达式

正则表达式概念

基本概念及操作

基本概念

一个正则表达式描述了一个定义在某个字母表 Σ \Sigma Σ上的字符串的集合+一个描述空串的 ϵ \epsilon ϵ。字符串的这种集合称为一种语言。

基本操作

  • 选择:两个字符串集合 R R R S S S的并集,记 R ∣ S R|S RS { x ∣ x ∈ R 或 x ∈ S } \{x|x \in R 或 x \in S\} {xxRxS}
  • 连接:记 R S RS RS,包含前面集合的任一元素后接上后面集合的任一元素形成的所有字符串, { x y ∣ x ∈ R 且 y ∈ S } \{xy|x \in R 且 y \in S \} {xyxRyS}
  • 闭包:集合 R R R的柯林闭包,集合与自身连接零或多次形成的集合取并集,记作 R ∗ R^* R,定义为 ⋃ i = 0 ∞ R i \bigcup_{i = 0}^\infty R^i i=0Ri

归纳定义

对给定的字符集 Σ = { c 1 , c 2 , … , c n } \Sigma = \{c1,c2,\dots,cn\} Σ={c1,c2,,cn}
归纳定义:

  • 空串 ϵ \epsilon ϵ是正则表达式,表示仅含空串的集合,该语言只含空串。
  • 对于任意 c ∈ Σ c \in \Sigma cΣ c c c是正则表达式,表示尽包含 c c c的集合,仅串 c c c
  • 如果 M M M N N N是正则表达式,则以下也是正则表达式
    • 选择: M ∣ N = { M , N } M|N = \{M,N\} MN={M,N}
    • 连接: M N = { m n ∣ m ∈ M , n ∈ N } MN = \{mn|m \in M, n \in N\} MN={mnmM,nN}
    • 闭包: M ∗ = { ϵ , M , M M , M M M , …   } M^* = \{\epsilon,M,MM,MMM,\dots\} M={ϵ,M,MM,MMM,}
  • 优先级:括号、闭包、连接、选择、左结合

正则表达式的代数定律

相等定义

如果两个正则表达式 r r r s s s表示相同的语言

  • 称为 r r r s s s等价
  • 如: a ∣ b = b ∣ a a|b = b|a ab=ba

代数定律

  • r ∣ s = s ∣ r r|s = s|r rs=sr
  • r ∣ ( s ∣ t ) = ( r ∣ s ) ∣ t r|(s|t) = (r|s)|t r(st)=(rs)t
  • r ( s t ) = ( r s ) t r(st) = (rs)t r(st)=(rs)t
  • r ( s ∣ t ) = r s ∣ r t , ( s ∣ t ) r = s r ∣ t r r(s|t) = rs|rt,(s|t)r = sr|tr r(st)=rsrt,(st)r=srtr
  • ϵ r = r ϵ = r \epsilon r = r\epsilon = r ϵr=rϵ=r
  • r ∗ = ( r ∣ ϵ ) ∗ r^* = (r|\epsilon)^* r=(rϵ)
  • r ∗ ∗ = r ∗ r^{**} = r^* r=r

正则表达式的拓展

多种针对RE的拓展,以增强RE描述字符串的能力

  • +:一个或多个实例,e+ == 一个或多个e
  • ?:零个或一个实例,e? == 零个或一个e
  • 字符类
    • [abc] == a|b|c
    • 连接:第一个和最后一个符号,中间连词符:[a-c] == a|b|c
  • 转义
    • 如:使用\*表示*
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值