1.引言
针对文本处理任务,正则表达式是一项很有用的能力。比如下面这些场景:
- 输入数据校验:保障数据符合格式要求(Email,电话号码)
- 数据提取:提取模式化数据(电话号码,ID,URL)
- 文本处理:替换,清洗,格式化
- 结构化文本解析:日志,配置文件
- 安全防护:敏感信息检查,攻击特征识别
等等。这篇文章,我们来看正则表达式的方方面面。
2.正则表达式
2.1.基础语法
2.1.1.元字符
正则表达式的本质,是通过一系列特殊字符构建匹配模式,这些特殊字符分类有:定位符,通配符,量词符,逻辑符。
shell
- 定位符
^:匹配字符串开始
$:匹配字符串结尾
\b:匹配单词边界
^:匹配字符串开始示例

$:匹配字符串结尾示例

\b:匹配单词边界示例


shell
- 通配符
.:匹配除换行符以外的任意单个字符
\d:匹配数字
\w:匹配单词字符(字母,数字,下划线)
\s:匹配空白字符(空格,制表符,换行)
.:匹配除换行符以外的任意单个字符

\d:匹配数字

\w:匹配单词字符(字母,数字,下划线)

\s:匹配空白字符(空格,制表符,换行)

shell
- 量词符
*:0次或多次
+:一次或多次
?:0次或一次
{n}:精确n次
{n,}:至少n次
{n,m}:n到m次
*:0次或多次

+:一次或多次

?:0次或一次

{n}:精确n次

{n,}:至少n次

{n,m}:n到m次

shell
- 逻辑符
|:或运算
[...]:字符集合
[^...]:否定字符集合
|:或运算

[...]:字符集合

\^...\]:否定字符集合

#### 2.1.2.分组
在文本提取场景中,可以通过"()"创建分组方式提取目标数据:
```shell
():创建捕获分组
(?:):非捕获组
(?P