---
title: 正则表达式学习
abbrlink: 13105
date: "2024-12-20 22:10:39"
updated: "2025-07-04 18:44:32"
desc: 从实际需求出发学习正则表达式——为铁锈战争语法编写代码高亮。本文系统整理正则表达式核心知识点，包含匹配模式、字符组与实战练习示例
categories:
    - 正则表达式
tags:
    - 学习
    - 记录
    - 教程
    - 抽象
---

抽象但效率高，学会的话很方便：）

<!--more-->

## 前言

想为铁锈战争语法写高亮的，但是我不会写匹配模式，所以我开始学习正则表达式。
这篇文章可能会继续更新。

推荐网站:

[Regex Learn - 逐步从零基础到高阶。](https://regexlearn.com/zh-cn)

### 正则表达式文档

| 类别 | 表达式 | 描述 |
| ------------ | ---------- | ------------------------------------------------ | ---------------------------- |
| 修饰符 | `/.../g` | 全局匹配 |
| | `/.../i` | 忽略大小写 |
| | `/.../m` | 多行模式 |
| | `/.../s` | 包含换行符 |
| 特殊字符 | `.` | 匹配任意单个字符（除了换行符） |
| | `^` | 匹配输入字符串的开始位置 |
| | `$` | 匹配输入字符串的结束位置 |
| | `*` | 匹配前面的子表达式零次或多次 |
| | `+` | 匹配前面的子表达式一次或多次 |
| | `?` | 匹配前面的子表达式零次或一次 |
| | `{n}` | 匹配确定的n次 |
| | `{n,}` | 至少匹配n次 |
| | `{n,m}` | 最少匹配n次且最多m次 |
| | `[]` | 匹配括号内的任意字符（字符集） |
| | `         |` | 匹配两项之间的任意一项（或） |
| | `\` | 转义特殊字符或表示特殊序列的开始 |
| 预定义字符集 | `\d` | 匹配任意数字（等价于`[0-9]`） |
| | `\D` | 匹配任意非数字字符 |
| | `\w` | 匹配任意字母数字字符（等价于`[a-zA-Z0-9_]`） |
| | `\W` | 匹配任意非字母数字字符 |
| | `\s` | 匹配任意空白字符（包括空格、制表符、换行符等） |
| | `\S` | 匹配任意非空白字符 |
| 量词 | `*` | 匹配前面的字符零次或多次 |
| | `+` | 匹配前面的字符一次或多次 |
| | `?` | 匹配前面的字符零次或一次 |
| | `{n}` | 匹配前面的字符n次 |
| | `{n,}` | 至少匹配n次 |
| | `{n,m}` | 最少匹配n次且最多m次 |
| 分组与捕获 | `(...)` | 将多个表达式组合成一个子表达式，并捕获匹配的文本 |
| 零宽断言 | `^` | 匹配字符串的开始 |
| | `$` | 匹配字符串的结束 |
| | `\b` | 匹配一个单词边界 |
| | `\B` | 匹配一个非单词边界 |
| | `(?=...)` | 正向前瞻断言，匹配...前面的位置 |
| | `(?!...)` | 负向前瞻断言，匹配除了...外前面的位置 |
| | `(?<=...)` | 正向后瞻断言，匹配...后面的位置 |
| | `(?<!...)` | 负向后瞻断言，匹配除了...外后面的位置 |

一般而言，我们通常使用`/.../g`来进行全局匹配

## 特殊字符

### 直接匹配

> `/nihao/g`

> skdabg**nihao**niasbf

### .

这个是通配符，匹配任意字符，例如

> ` /./g`

> **saklnfobovibo**

### ^

这个是匹配开头的字符串，例如

> `/^class/g`

> **class**room

### $

这个是匹配输入字符串的结尾

> `/room$/g`

> class**room**

### \*

这个是匹配前面的字符零次或多次，也就是计算理论中的星闭包 \*

> `/lu*ck/g`

> **luck**,**luuuuuck**,**lck**

### +

这个是匹配前面的字符一次或多次，也就是计算理论中的加法闭包或叫正闭包 +

> `/go+gle/g`

> **google**,**gooogle**,**goooooogle**

### ?

这个是匹配前面的字符零次或一次.

> `/apples?/g`

> **apples**,**apple**

### {}

#### {n}

这个是匹配确定的n次

> `/hello{3}/g`

> **hellooo**,hello,helloo

#### {n,}

这个是至少匹配n次,也可以看作一种区间形式

> `/hello{2,}/g`

> **hellooo**,**helloo**,helloo

#### {n,m}

这个是最少匹配n次且最多m次,可以理解为区间

> `/hello{2,4}/g`

> **hellooo**,**helloo**,hello,hell,**helloooo**


---

**作者：**xingwangzhe

**本文链接：**[https://xingwangzhe.fun/posts/13105/](https://xingwangzhe.fun/posts/13105/)

本文采用[知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议](https://creativecommons.org/licenses/by-nc-sa/4.0/)进行许可。