---
title: 正则表达式
date: 2024-06-06T23:51:24Z
tags: []
---

## 元字符

​`.`​:匹配任意字符(除\n)  
​`\w`​:匹配字母,数字,下划线  
​`\W`​:匹配非字母,数字,下划线  
​`\s`​:匹配任意空白字符  
​`\S`​:匹配任意非空白字符  
​`\d`​:匹配任意十进制数

## 限定符

​`?`​ 前面的字符可以出现 0 次或 1 次(可有可无)  
​`*`​ 前面的字符可以出现 0 次或者是多次  
​`+`​ 前面的字符出现一次以上  
​`{}`​ 可以限定出现的次数

> 例如  
> {n}前面出现 n 次  
> {n,}最少出现 n 次  
> {n,m}最少出现 n 次,最多 m 次

## 边界符

​`\b`​ 单词边界符

​`\B`​ 非该单词边界

​`/g`​ 全局标记找到所有匹配子串

## 匹配模式

​`/m`​ 多行匹配

​`^`​ 开头

​`$`​ 结尾

​`.*`​：贪婪验证

​`.*?`​:惰性验证

## 其他字符

​`[]`​ 区间字符:匹配[]所指定的字符

> [.?!]匹配句号,问号,感叹号  
> [0-5]匹配 0,1,2,3,4,5

​`^`​ 排除字符:匹配不在[]中指定的字符

> [^0-5]匹配除了 0,1,2,3,4,5 之外的字符

​`|`​ 选择字符:用于匹配|作用的任意字符

> \d{18}|\d{15}匹配 18 位或 15 位身份证

​`\`​ 转义字符:将特殊字符转为普通字符使用

​`[\u4e00-\u9fa5]`​:匹配任意一个汉字

​`()`​ 分组:改变限定字符的作用

## 分组

- 普通分组

  ​`()`​

- 非捕获分组

  ​`(?:<表达式>)`​

- 回溯分组

  ​`\<number>`​

  数字代表了第几个分组

> (ab)+ ab 出现一次以上

## 断言

### 先行断言

‍

- 正向

  ​`(?=<表达式>)`​

  > 右边必须出现某个字符

- 反向

  ​`(?!<表达式>)`​

  > 右边不能出现某个字符

### 后行断言

- 正向

  ​`(?<=<表达式>)`​

  > 左边必须出现某个字符

- 反向

  ​`(?<!<表达式>)`​

  > 左边不能出现某个字符
