什么是正则表达式?

什么是正则表达式?
compiler designprogramming languagescomputer programming更新于 2025/9/29 22:37:17
正则表达式是定义模式的重要符号。每个模式连接一组字符串。因此,正则表达式将作为字符串集的名称。
它支持一种合适且有用的符号来描述标记。正则表达式定义了有限自动机(转换图)所接受的语言。
正则表达式定义在字母表 $\sum$ 上。
如果 R 是正则表达式,则 L(R) 表示该正则表达式所表示的语言。
语言 − 它是基于某个固定字母表的字符串集合。空字符串可以用 ε 表示。
示例 − 如果 L(语言)= 一组由 0 组成的字符串 &长度为 2 的 1
则 L = {00, 01, 10, 11}
示例 − 如果 L = {1
则 L*=L0∪L1∪L2∪…. 这里 * 可以是 0、1、2、3…hellip;…hellip;…..
∴ L*={ε}∪{1}∪{11}∪…hellip;…..
∴ L*={ε,1,11,111,…..}
正则语言的运算
正则语言的各种运算如下 −
若 L1={00,10} & L2={01,11}
>运算描述示例并集将两个语言 L1 和 L2 并集,生成的字符串集合可能是语言 L1 或语言 L2,也可能是两者兼而有之。 L1∪L2= {L1 中的字符串和 L2 中的字符串的集合td>L1∪L2={00, 10, 01, 11td>连接连接两种语言 L1 和 L2 会创建一组字符串,这些字符串由 L1 中的字符串与 L2 中的字符串组合而成(L1 中的字符串后面应该跟 L2 中的字符串)。 L1L2={L1中的字符串集合,后跟 L2中的字符串}。L1L2={0001, 0011, 1001,1011L1的 Kleen 闭包${L^{*}_{1}}$Kleene 闭包定义字符串中输入符号的零次或多次出现。它由一个空字符串Ɛ(一组输入符号出现0次或多次的字符串)组成。${L^{*}_{1}}$=${L^{0}_{1}}$∪${L^{1}_{1}}$∪${L^{2}_{1}}$∪…..${L^{*}_{1}}=\displaystyle\bigcup\limits_{i=0}^{∞} {L^{i}_{1}}$${L^{*}_{1}}$={ε,00,10,1010, 0010,1000,0000,000000, 001000,….正闭包${L^{+}_{1}}$正闭包表示字符串中输入符号出现一次或多次。它消除空字符串Ɛ(包含一个或多个输入符号的字符串集合)。${L^{+}_{1}}$=${L^{1}_{1}}$∪${L^{2}_{1}}$∪…..${L^{+}_{1}}=\displaystyle\bigcup\limits_{i=0}^{∞} {L^{i}_{1}}$${L^{+}_{1}}$={00,10,1010, 0010,1000,0000,000000, 001000,….td,即:
正则表达式的扩展
克莱尼(Kleene)在 20 世纪 50 年代提出了正则表达式,其主要操作是并集、串联和 Kleene 闭包。
有一些指定的符号扩展可以直接使用 −
一个或多个实例 − 一元后缀运算符 + 显示正则表达式及其语言的正闭包。它定义了如果 a 是正则表达式,则 (a) + 表示语言 (L(a) +)。有两个代数定律 $r^{*}$ = r+|e 和 r+ =r$r^{*}$ = $r^{*}$r 将正闭包与 Kleene 闭包联系起来。
零个或一个实例 − 一元后缀运算符? 定义零个或一个实例。它定义了 r? 类似于 r|e 或 L(r?) = L(r) U {e}。该运算符具有与 * 和 + 相同的优先级和结合性。/
相关文章
Convert the following LEX program into Lexical Analyzer.\AUXILIARY DEFINITIONS\ −\ −\ −\TRANSLATION RULES\ a{ }\ abb{ }\ a*b+
在编译器设计中,块结构化语言的实现是什么?
编译器设计中的语法制导翻译方案是什么?
什么是块结构?
什么是过程调用的堆栈分配?
简单堆栈分配方案的实现
什么是堆分配?
什么是堆栈分配?
什么是静态分配?
描述编程语言设计中影响存储管理的问题?
打印
下一节 ❯❮ 上一节