Skip to content

正则表达式模式用于匹配和操作字符串中的特定文本,常见的模式和用法如下:

1. 基本字符匹配 ​

1.1 精确匹配

  • 模式:abc
  • 描述:匹配字符串中出现的 "abc"。

1.2 任意单个字符

  • 模式:a.c
  • 描述:匹配以 "a" 开头和 "c" 结尾,中间有任意单个字符的字符串。例如 "abc" 和 "a-c"。

2. 字符类 ​

2.1 数字字符

  • 模式:\d
  • 描述:匹配任何数字字符,相当于 [0-9]。

2.2 非数字字符

  • 模式:\D
  • 描述:匹配任何非数字字符。

2.3 字母字符

  • 模式:\w
  • 描述:匹配任何字母、数字或下划线,相当于 [a-zA-Z0-9_]。

2.4 非字母字符

  • 模式:\W
  • 描述:匹配任何非字母、数字或下划线。

2.5 空白字符

  • 模式:\s
  • 描述:匹配任何空白字符,如空格、制表符或换行符。

2.6 非空白字符

  • 模式:\S
  • 描述:匹配任何非空白字符。

3. 量词 ​

3.1 0 次或多次

  • 模式:a*
  • 描述:匹配零次或多次 "a"。例如 ""、"a" 和 "aaa"。

3.2 1 次或多次

  • 模式:a+
  • 描述:匹配一次或多次 "a"。例如 "a" 和 "aaa"。

3.3 精确次数

  • 模式:a{3}
  • 描述:匹配恰好三次 "a"。例如 "aaa"。

3.4 最小次数

  • 模式:a{2,}
  • 描述:匹配至少两次 "a"。例如 "aa" 和 "aaa"。

3.5 范围次数

  • 模式:a{2,4}
  • 描述:匹配两到四次 "a"。例如 "aa"、"aaa" 和 "aaaa"。

4. 边界匹配 ​

4.1 单词边界

  • 模式:\bword\b
  • 描述:匹配完整的单词 "word"。例如能匹配 "a word here" 中的 "word",但不能匹配 "wording" 中的 "word"(后面跟着字母,不构成单词边界)。

4.2 非单词边界

  • 模式:\Bword\B
  • 描述:匹配 "word" 在非单词边界中的出现,即两侧都不是单词边界。例如 "sworded" 中的 "word"(前面是 "s"、后面是 "e",两侧都是单词字符)。

4.3 行的开始

  • 模式:^abc
  • 描述:匹配以 "abc" 开头的行。

4.4 行的结束

  • 模式:abc$
  • 描述:匹配以 "abc" 结尾的行。

5. 捕获组与非捕获组 ​

5.1 捕获组

  • 模式:(abc)
  • 描述:捕获并存储匹配的 "abc" 部分。

5.2 非捕获组

  • 模式:(?:abc)
  • 描述:分组但不捕获匹配的内容。

5.3 捕获组的引用

  • 模式:(a)(b)\1\2
  • 描述:匹配 "ab" 后跟重复的 "a" 和 "b",如 "abab"。
  • 注意:Go 标准库 regexp 的 RE2 引擎不支持反向引用 \1、\2(编译时报 invalid escape sequence),该模式在 PCRE/Python 等引擎中可用。

6. 先行断言与后行断言 ​

注意:Go 标准库 regexp 的 RE2 引擎不支持本节的四种断言语法(编译时报 invalid or unsupported Perl syntax),以下模式仅适用于 PCRE/Python 等引擎;在 Go 中需要把上下文一并匹配后用捕获组提取。

6.1 先行断言

  • 模式:a(?=b)
  • 描述:匹配 "a" 仅当它后面跟着 "b"。

6.2 否定前瞻

  • 模式:a(?!b)
  • 描述:匹配 "a" 仅当它后面不跟着 "b"。

6.3 后行断言

  • 模式:(?<=b)a
  • 描述:匹配 "a" 仅当它前面跟着 "b"。

6.4 否定后瞻

  • 模式:(?<!b)a
  • 描述:匹配 "a" 仅当它前面不跟着 "b"。

7. 选择和替代 ​

7.1 选择

  • 模式:a|b
  • 描述:匹配 "a" 或 "b"。

7.2 替代

  • 模式:(?:a|b)
  • 描述:分组匹配 "a" 或 "b",但不捕获。

8. 特殊字符 ​

8.1 转义字符

  • 模式:\.、\*
  • 描述:匹配实际的点号 . 或星号 *。

8.2 任意字符

  • 模式:a.
  • 描述:匹配 "a" 后跟任何单个字符。

9. 贪婪与非贪婪匹配 ​

9.1 贪婪匹配

  • 模式:a.*b
  • 描述:匹配尽可能多的字符,直到遇到 "b"。

9.2 非贪婪匹配

  • 模式:a.*?b
  • 描述:匹配尽可能少的字符,直到遇到 "b"。

Go 的 regexp 用的是 RE2 引擎,第 5、6 节的反向引用和断言在 Go 里编译会报错,写 Go 正则前先对照 RE2 支持的语法。

参考资料 ​

同层页面 ​

相关页面 ​

Hello Golang