正则表达式的属性

原文:https://www . geesforgeks . org/properties-of-正则表达式/

正则表达式:

  • 这是表示常规语言的一种方式。
  • 正则语言的代数描述是使用正则表达式完成的。
  • 它们可以定义各种形式的有限自动机可以描述的同一种语言。
  • 正则表达式提供了有限自动机没有的东西,即它是一种声明性的方式来表达我们想要接受的字符串。它们作为许多系统的输入。它们在许多系统(Java、python 等)中用于字符串匹配。)
  • 例如,词法分析器生成器,如 Lex 或 Flex。

正则表达式中广泛使用的运算符是克莱尼闭包(∔)、串联(。),联合(+)。

正则表达式规则:

  • 正则表达式集由以下规则定义。
  • ∑的每个字母都可以做成正则表达式,空字符串,∈本身就是正则表达式。 如果 r1 和 r2 是正则表达式,那么(r1),r1.r2,r1+r2,r1*,r1 + 也是正则表达式。

示例–∑= { a,b}和 r 是使用这些符号制作的语言的正则表达式

| 常规语言 | 正则集 | | --- | --- | | *本文件迟交 | { } | | ∈ | {∈} | | a* | {∞,a,aa,aaa …..} | | a+ b | {a,b} | | 甲乙 | {ab} | | a* + ba | {∞,a,aa,aaa,…,ba} |

对正则表达式执行的操作: 1。union– L1 和 L2 这两种常规语言的并集(使用 L1 ∪ L2 表示)也是常规的,它表示 L1 或 L2 或两者都有的字符串集。 L1 = (1+0)。(1+0) = {00,10,11,01}和 L2 = {∑,100} 然后 L1∪L2 = {∑,00,10,11,01,100}。

2。串联– 两种常规语言 L1 和 L2 的串联,用 L1 表示。L2 也是正则的,它代表了一组字符串,这些字符串是由 L1 的任意字符串和 L2 的任意字符串连接而成的。 例– L1 = { 0,1 }和 L2 = { 00,11}然后是 L1。L2 = {000,011,100,111}。

3。克莱尼闭包– 如果 L1 是一种正则语言,那么克莱尼闭包,即 L1 的 L1也是正则的,并且表示通过从 L1 获取多个字符串而形成的一组字符串,并且同一字符串可以重复任意次并连接这些字符串。 示例– L1 = { 0,1 } = {∞,0,1,00,01,10,11 ……。},那么 L是符号 0 和 1 的所有可能的字符串,包括空字符串

正则表达式的代数性质: 克莱尼闭包是一元运算符以及 Union(+)和 concatenation 运算符(。)是二元运算符。

1。闭包– 如果 r1 和 r2 是正则表达式,那么

  • r1*是一个 RE
  • r1+r2 是一个 RE
  • r1.r2 是一个环

2。封闭法–

  • (r) = r,关闭已经关闭的表达式不会改变语言。
  • ∅* =∑,一个由任意数量的空字符串连接而成的字符串本身就是空的。
  • r + = r.r = rr,as r * =∑+r+RR+RRR……。和 r.r* = r+ rr + rrr ……
  • r = r+ ∈

3。关联性– 如果 r1、r2、r3 是 re,那么 I)R1+(R2+R3)=(R1+R2)+R3

  • 例如 : r1 = a,r2 = b,r3 = c,那么
  • 在 LHS 得到的正则表达式变成 a+(b+ c),对应 RE 的正则集是{a,b,c}。
  • 因为 RHS 中的 RE 变成了(a+ b) + c,这个 RE 的正则集是{a,b,c},这两种情况下都是一样的。因此,联合运算符具有关联性。

二。)r1。(r2.r3) = (r1.r2).r3

  • 例如–R1 = a,r2 = b,r3 = c
  • 那么 RE a(b . c)接受的字符串只有 abc。
  • 在 RHS 中 RE 接受的字符串是(a.b)。c 只是 abc,这两种情况下都是一样的。因此,关联性属性适用于串联运算符。

关联性属性不适用于克莱尼闭包(*),因为它是一元运算符。

4。同一性– 在联合算子的情况下 如果 r+x = r x =∅为 r ∪ ∅=为 r,那么∅就是+的同一性。 因此,∅是联合运营商的身份要素。 在串联运算符– 的情况下,如果 r.x = r,对于 x =∑ r,∑= r∈是串联运算符(。) .

5。消灭者–

  • 如果 r+x = r∪x = x,则+没有零化子
  • 在串联运算符 r.x = x 的情况下,当 x = ∅,则 r.∅ = ∅,因此∅是()的零化子。)运算符。例如{a,aa,ab}。{ } = { }

6。交换性质– 如果 r1、r2 是 re,那么

  • r1+r2 = r2+r1。例如,对于 r1 =a 和 r2 =b,则 RE a+ b 和 b+ a 相等。
  • r1.r2 ≠ r2.r1 .例如,对于 r1 = a 和 r2 = b,那么 RE a.b 不等于 b.a。

7。分布式属性– 如果 r1、r2、r3 是正则表达式,那么

  • (R1+R2)R3 = R1 . R3+R2 . R3,即右分布
  • r1。(r2+ r3) = r1.r2 + r1.r3,即左分布
  • (r1.r2) +r3 ≠ (r1+r3)(r2+r3)

8。幂等定律–

  • R1+R1 = R1 R1∪R1 = R1,因此并集算子满足幂等性质。
  • r.r ≠ r 串联运算符不满足幂等属性。

9。正则表达式的标识– 正则表达式有许多标识。让 p,q 和 r 是正则表达式。

    • r = r
  • *。r = r = r
  • ∈.r = r,∞= r
  • =∈和∅ = ∈
  • r + r = r
  • r。r = r*
  • r.r = r。r = r +
  • (r) = r*
  • ∑+r . r * = r * =∑+r . r *
  • (p.q)。p = p(q . p)
  • (p + q) = (p)。q) = (p + q)*
  • (p+ q)。r= p.r+ q.r 和 r(p+q)= r . p+r . q