第二章_2.4 正则表达式.pptVIP

  • 3
  • 0
  • 约2.81千字
  • 约 30页
  • 2019-09-06 发布于广东
  • 举报
2.4 正则表达式 主要内容: 1.正则表达式和正则集; 2.正则表达式和有限自动机的相互转化。 一、正则表达式和正则集 正则表达式是表示給定字母表上的符号串集合的一种工具,是描述程序设计语言中单词的一种简单而且数学化工具。 表示符号串的构成模式。 正则表达式r定义了一个符号串集合rs, rs内的每个符号串都与r所定义的模式相匹配,rs称为由r生成的语言,记作L(r)。 正则表达式所表示的符号串集合又称为正则集。 (一)正则表达式和正则集的定义 定义1:设∑为有限字母表,在∑上的正则表达式和正则集可递归定义如下: (1) ? 和?是∑上的正则表达式,它们表示的正则集分别为{ε}和?; (2) 对任何a∈∑,a 是∑上的正则表达式,它所表示的正则集为{a}; (3) 若r,s都是正则表达式,它们表示的正则集分别为R和S, 则(r)、r|s、r?s、(r)*也是正则表达式,它们分别表示的正则集是:R,R∪S , RS和R*。 (4) 有限次使用上述三条规则构成的表达式,称为∑上的正则表达式,仅由这些正则表达式表示的集合称为正则集。 另外一种定义 设∑为有限字母表, R?表示∑上的所有正则表达式的集合: ?是正则表达式,即? ? R?,则有: L(? )={  }; ?是正则表达式,即? ? R?,则有: L(? )={?}; a ? ?是正则表达式,即a ? R?,则有: L(a )={a}; 设A和B是正则表达式,即A? R ?, B? R ?,则有:   (A)? R ?, L((A))= L(A)   A|B? R ?, L(A|B)= L(A) ∪ L(B) A ? B? R ?, L(A ? B)= L(A)L(B)   A*? R ?, L(A*)= (L(A))* (二)正则表达式示例(1) ?={ a,b }. 正则表达式e L(e) 1.a {a} 2.a|b {a, b} 3.ab { ab } 4.(a|b) (a|b) {aa, ab, ba, bb} 5. a* {ε,a,aa,aaaa,…} (二)正则表达式示例(2) ?={ a,b }. 正则表达式e ab* 2. a(a|b)* L(e) L(ab*) =L(a) L(b*) ={a}{ε,b, bb,bbb,…} L(a(a|b)*) =L(a) L( (a|b)*) =L(a) (L(a|b))* ={a}{a,b}* ?上所有以a为首后跟任意多个 (包括0个)b的字符串集 ?上所有以a为首的字符串集 (三)正则表达式的性质 正则表达式的等价 A | B = B | A | 的可交换性 A | (B | C) =(A | B ) C | 的可结合性 A (B C) =(A B )C 连接的可结合性 A (B | C) =A B | A C 连接的可分配性 (A | B ) C =A C | B C 连接的可分配性 A** =A* 幂的等价性 A ? = ? A=A ?是连接的恒等元素 (四)扩充的正则表达式 一次或多次重复: R+ 任何符号: “…” 在字母表中任何符号。 符号范围: “--” ,如[0--9] [a--z] [A--Z]。 不在给定范围内的符号: “^”或“~”。如 ~(a|b|c)或[^a] [Labc] (~ 读作:tilde ^ 读作: ?caret) 0或1次(可选): “?”。如r?=(? |r) (五)正则定义 为较长的正则表达式提供一个简化了的名字。如要为一个或多个数字序列写一个正则表达式,则可写作: (0|1|2|3|4|5|6|7|8|9) (0|1|2|3|4|5|6|7|8|9)* 或写作 digit digit* 其中名字digit就是数字的正则定义,表示为: digit = 0|1|2|3|4|5|6|7|8|9 例:程序设计语言中单词的正则表达式定义 保留字 如 Begin=begin 标识符 letter=[a-z,A-Z] digit=[0-9] identifier=letter(letter|digit)* 数字 整数Int=[1-9]Digit*|0 实数real=Int.Int 特殊符号 +|-|… (六)正则表达式的局限性 正则表达式不能用于描述配对或嵌套的结构 正则表达式不能用于描述重复串 例:

文档评论(0)

1亿VIP精品文档

相关文档