认知始于 Excel,不知道终于哪儿。
介绍与应用
属性:用于匹配和操作文本的工具
设计思想:用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,为“匹配”,反之,不“匹配”。
应用场景:
- 文本查找
- 文本替换
- 文本格式校验
- …
应用环境:大多数编程语言的标准库包含正则表达式的支持
- Python
- SQL
- Javascript
- Word, Excel…
语法
主要语法如下:
普通字符
明确的关键字:在正则表达式中直接写即可
- 文字字符:英文字母、中文、数字
- 符号:@ % _ 等等
特殊字符
一些有特殊含义的字符若要匹配,必须首先使字符”转义”,即将反斜杠字符 ``` 放在它们前面。
| 特殊字符 | 描述 | 
|---|---|
| $ | 匹配输入字符串的结尾位置 | 
| () | 标记一个子表达式的开始和结束位置 | 
| * | 匹配前面的子表达式零次或多次 | 
| + | 匹配前面的子表达式一次或多次 | 
| [ | 标记一个中括号表达式的开始 | 
| ? | 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。 | 
| \ | 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符 | 
| ^ | 匹配输入字符串的开始位置,除非在方括号表达式中使用,当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合。 | 
| { | 标记限定符表达式的开始 | 
| | | 指明两项之间的一个选择 | 
非打印字符
| 字符 | 描述 | 等效 | 
|---|---|---|
| \cx | 匹配由x指明的控制字符 | |
| \f | 匹配一个换页符 | \x0c和\cL | 
| \n | 匹配一个换行符 | \x0a和\cJ | 
| \r | 匹配一个回车符 | \x0d和\cM | 
| \s | 匹配任何空白字符,包括空格、制表符、换页符等等。 | \f\n\r\t\v | 
| \S | 匹配任何非空白字符 | ^\f\n\r\t\v | 
| \t | 匹配一个制表符 | \x09和\cI | 
| \v | 匹配一个垂直制表符 | \x0b和\cK | 
不需要记住,可用时查。
字符集合
单个关键字的值范围,包含在一对 [] 中间。
应用:
- 明确某个字符的范围的模糊匹配- 如果差异不仅仅在一个字符上,则不适合采用字符集合 -> 应采用子表达式
 
- 可以简化的连续值范围:使用 -符号
- 字符集合为排除在外的值:使 ^符号
限定符、定位符
如下:
限定符
给前一个字符追加限定范围
| 常用限定符 | 描述 | 
|---|---|
| * | 前面的字符/子表达式出现0次或多次 | 
| + | 前面的字符/子表达式出现1次或多次 | 
| # | 前面的字符/子表达式出现0次或1次 | 
| {} | 前面的字符/子表达式出现具体{}次 | 
注意:前面为模糊匹配范围时,会出现“贪婪匹配”的问题 – 默认情况下,正则表达式会匹配尽量多的字符 – 可通过添加 ? 实现非贪婪匹配。
定位符
标记匹配位置的元字符 - 只有4个:
| 定位符 | 描述 | 
|---|---|
| ^ | 字符串开始的位置 | 
| $ | 字符串结尾的位置 | 
| \b | 单词边界 - 字符与空格间的位置 | 
| \B | 非单词边界 | 
子表达式
内嵌的子正则表达式,包含在一对 () 中,可以看作是一个整体。
- 与正则表达式语法相同;
- 允许子表达式内嵌套子表达式;
- 用 |分割多个子表达式/多种情况;
- 可以标记子匹配项,如 ([a-z])\1([a-z])\2匹配aabb ... cczz;
- 子表达式的匹配结果会单独存储,如希望不存储,可以添加 ?:(在日常表达中不太常用);
- 可作为预查匹配项/自定义的定位符;
省略符、修饰符
如下:
省略符
为了简化正则表达式的元字符,以 \ 开头。
| 字符 | 描述 | 等效 | 
|---|---|---|
| . | 匹配除换行符( \n、\r)之外的任何单个字符 | [^\n\r] | 
| \d | 匹配一个数字字符 | [0-9] | 
| \D | 匹配一个非数字字符 | [^0-9] | 
| \s | 匹配所有空白符,包括空格、制表符、换页符等。 | [\f\n\r\t\v] | 
| \S | 匹配所有非空白符 | [^\f\n\r\t\v] | 
| \w | 匹配一个字母、数字、下划线字符 | [A-Za-z0-9_] | 
| \W | 匹配一个非字母、数字、下划线字符 | [^A-Za-z0-9_] | 
每个省略符都有替代方案,所以不必强求记忆。
修饰符
严格意义上不是正则表达式的一部分,是指定匹配策略的,可叠加使用。
| 常规修饰符 | 描述 | 
|---|---|
| i | ignore - 不区分大小写 | 
| g | global - 全局匹配 | 
| m | multi-line - 多行匹配 | 
| s | 默认情况下的圆点 .是匹配除换行符\n之外的任何字符,加上s修饰符之后,.中包含换行符\n。 | 
某些正则表达式的代码库可能存在特别的修饰符。
有些软件虽支持正则表达式搜索,但不一定开放修饰符的设置。
记不住语法的解决方案
正则表达式元字符手册:Road To Coding:正则表达式
在线测试正则表达式:Regular expression tester