运算符
1. |
运算符 —— “选择”操作(或运算)
|
表示选择运算,常用于正规表达式中的“或”操作。它允许匹配多个可能的模式之一。用正规集来表示时,|
运算符表示两个集合的并集。|
运算符可以类比为一个分岔路口,走左边可以去一条路,走右边可以去另一条路。这就像给你多个选项,让你从中选择一个路径。
例子:
- 正规表达式
a|b
表示可以匹配字符串a
或b
。 - 如果用集合来描述,假设集合 A = {a} 和集合 B = {b},则 A | B 表示
{a, b}
。
正规表达式 a|b
表示 “a 或 b”。这就像你站在一个分岔口前,有两条路可以走,一条是通向字母 a
的路,另一条通向字母 b
的路。无论你选择走哪条路,你都会匹配其中一个。
类比:
假设你在输入一个电话号码时,你可以输入 123
或者 456
。在这个场景下,正则表达式 123|456
就表示“匹配 123 或 456”。无论输入哪个数字组合,系统都会认为是有效的。
或者想象你在点餐,菜单上有两个主菜可供选择——比萨或者汉堡。你可以选其中之一,但不需要同时选两个。这个“或者”的选择就是 |
运算符的本质。
正规式和正规集:
- 正规式:a | b
- 对应的正规集:{a, b}
解释:这个正规式的意思是:接受的字符串可以是 a
或 b
,是一个选择操作。
2. ·
运算符 —— “连接”操作(连接运算)
·
表示连接运算,也称为串联或连接操作。在正规表达式中,·
用于将两个字符串连接成一个新的字符串。通常在正规表达式中隐含存在,不用明确表示。·
运算符是把两个字符或字符串像串珠子一样串在一起。你可以想象它就像是在搭积木,你先放一个积木,再放另一个积木,最终构建出一个完整的东西。
例子:
- 正规表达式
ab
表示字符串a
和b
的连接,匹配的是字符串ab
。 - 如果用正规集来表示,A = {a} 和 B = {b},则 A · B 表示
{ab}
。
正规表达式 ab
(通常省略 ·
)表示 “a 和 b 的连接”。这意味着 a
一定要和 b
紧密相连,它们像朋友一样手牵手,不能分开。只有当 a
和 b
这样紧跟着出现时,才算匹配。
类比:
比如你在创建密码的时候,可能有一些规则:密码必须包含字母和数字。在这种情况下,正则表达式 字母·数字
就是要求字母紧跟数字出现,比如 A1
或 b2
。
也可以想象你在写作业,老师要求你必须在一段话中用到两个特定的单词,并且这两个单词必须连在一起。例如,你必须写“苹果”和“香蕉”,并且它们不能分开。·
就是确保它们依次出现的连接运算。
正规式和正规集:
- 正规式:
a · b
- 对应的正规集:
{ab}
解释:这个正规式的意思是:字符串 a
紧跟着字符串 b
形成的连接,如 ab
。
3. *
运算符 —— “重复”操作(闭包运算)
*
表示闭包运算,称为 Kleene 星运算。它用于表示一个模式可以重复任意次(包括 0 次)。在正规语言中,这意味着允许该模式重复出现任意多次,甚至不出现。*
运算符就像一个无限循环的魔法符号,允许你重复某个字符或字符串任意次数——你可以重复很多次,也可以一次都不重复。这种重复操作就像在游戏中打怪升级,你可以不停地打怪(重复很多次),也可以一次都不打(零次)。
例子:
- 正规表达式
a*
表示匹配任意多个a
(包括不出现的情况),可以匹配空字符串、a
、aa
、aaa
,依此类推。 - 如果用正规集来描述,A = {a},则 A* 表示
{ε, a, aa, aaa, ...}
,其中ε
表示空字符串。
正规表达式 a*
表示 “任意多个 a”。这意味着可以是零个 a
、一个 a
、两个 a
,甚至十个 a
。只要出现的字符全是 a
,数量不限。
类比:
比如你在登录网站时,用户名字段允许你输入任意多个小写字母。这时,正则表达式 [a-z]*
就表示“任意数量的小写字母”,可以是空字符串(零个字母),也可以是 abc
、xyz
这样的字符串。
亦或者想象你正在画圆圈,每画一个就意味着多重复了一次。但是你有一个特殊能力:你可以决定画多少个圆圈。你可以画一个、画两个,甚至你可以不画(零次)。这就是 *
的力量——让你拥有无限可能的重复次数。
正规式和正规集:
- 正规式:
a*
- 对应的正规集:
{ε, a, aa, aaa, ...}
解释:这个正规式的意思是:可以有 0 或更多个 a
,因此匹配的字符串集合包括空字符串、一个或多个 a
的连续重复。
结合这些运算符的正规表达式例子
正规式:
(a|b)* · c
解释:
(a|b)
表示a
或b
,即可以是a
或b
之一。(a|b)*
表示a
和b
的任意次组合,可能是空字符串、a
、b
、aa
、ab
、ba
、bb
,依此类推。(a|b)* · c
表示所有由a
和b
组成的任意串,后面跟着一个c
。例如,ac
、bc
、aabc
、bbbc
都是符合的字符串。
对应的正规集:
{c, ac, bc, aac, abc, bbc, ...}
总结
|
运算符:表示“或”操作,构造多个可能的选择。像是在分岔路口做选择,你可以选其中之一。·
运算符:表示串联操作,将两个模式依次连接。像搭积木,两个字符一个接一个地组合在一起。*
运算符:表示重复操作,可以匹配模式的任意次数(包括 0 次)。像一个重复魔法,可以让你无限次(包括零次)重复某个字符或模式。