正则语言:所有“简单规则字符串”的集合,**它是“能用有限步骤判断是否符合规则”的字符串集合**。比如“所有以‘ab’结尾的字符串”“所有由‘a’和‘b’组成且包含至少一个‘a’的字符串”,都属于正则语言,正则语言是核心目标,正则表达式是“规则说明书”,
正则语言的核心特点,是对三种基础运算“封闭”,
- **并运算**:两个正则语言“合并”。比如“全a字符串”和“全b字符串”合并,得到“所有全a或全b的字符串”({“a”, “aa”, “b”, “bb”…});
- **连接运算**:两个正则语言“拼接”。比如“全a字符串”和“全b字符串”拼接,得到“先a后b的字符串”({“ab”, “aab”, “abb”…});
- **闭包运算**:一个语言“任意次重复”(包括0次,即空字符串)。比如“{‘a’}”的闭包,就是“所有全a字符串(包括空字符串)”({“”, “a”, “aa”…})
正则表达式的符号很简单,核心就几类:
- **基本字符**:比如“a”“b”“1”,代表具体的字符;
- **通配符与范围**:“.”匹配任意单个字符,“[0-9]”匹配任意数字,“[a-z]”匹配任意小写字母;
- **重复符号**:“*”代表“任意次重复(包括0次)”,“+”代表“至少1次重复”,“{n}”代表“刚好n次重复”;
- **逻辑符号**:“|”代表“或”,“()”用来改变运算优先级。
举例子:验证手机号。手机号的规则是“1开头,第2位是3-9,后面跟9个数字”,对应的正则表达式就是`^1[3-9]\d{9}$`。拆解一下:“^”代表字符串开头,“1”是固定第一位,“[3-9]”限定第二位范围,“\d”代表数字,“{9}”要求数字重复9次,“$”代表字符串结尾。把这个表达式放进Python的`re.match()`函数,或者Excel的`REGEXTEST`函数,电脑就能自动判断一个号码是否合法——这就是正则表达式的核心价值:把“自然语言规则”转化为“机器能懂的简洁符号”。
正则表达式和正则语言是“一一对应”的:一个正则表达式只能描述一个正则语言,一个正则语言也能写出至少一个正则表达式(比如“全a字符串”可以写“a*”,也可以写“aaa*”,但描述的是同一个语言)。

