简介

正则表达式 (regular expressions) 是一个非常有用的工具,可以从诸如代码、日志文件、电子表格或文档等文本中提取信息。虽然规范的语言背后有许多理论,但后续的课程和例子将探索正则表达式的更实际的用法,以便您能够尽快使用这个工具。

在使用正则表达式时要认识到的第一件事是:所有东西本质上都是字符,我们正在编写模式 (pattern) 来匹配特定的字符序列(也称为字符串)。大多数模式使用普通的 ASCII 字符,包括字母、数字、标点符号和键盘上的其他符号,如 %#$@!,但是也可以使用 unicode 字符来匹配任何类型的国际文本。

基础语法

举例 说明
abc 匹配拥有abc的字符串
\d 匹配从 0 到 9 的任意数字
\w 字母数字 (alphanumeric) 元字符,匹配英文文本中的字符,相当于字符范围 [A-Za-z0-9_]
\s 可以匹配空格 (␣)制表符 (\t)换行 (\n)回车 (\r)任意空白符(利用\s+可以匹配连续空格)
\b 匹配单词和非单词字符之间的边界。在捕获整个单词时最有用,例如模式 \w+\b
. 通配符,可以匹配任意单个字符 (字母、数字、空格等等)
[abc] []表示只匹配括号内的指定字符,在这里是只匹配单个字母 a、b 或者 c
[^abc] 使用[]^ (hat) 组成的表达式来排除特定字符。在这里表示将匹配除了字母 a、b 或 c 以外的任意单个字符
[^n-p] -表示匹配到连续范围内的字符,这里表示匹配字母 n 到 p 以外的任何单个字符
a{1,3} {}表示法指定每个字符的重复次数,匹配字符 a 至多 3 次,至少 1 次。ps{n,} 表示重复至少 n 次,至多无限制
a+ +克莱尼加号 (Kleene Plus)表示1 个或更多个它所跟随的字符,这里表示至少一个a
a* *克莱尼星号 (Kleene Star) 表示0个或更多个它所跟随的字符,这里表示任意个a
ab?c ?表示可选字符,这里可以匹配字符串 “abc” 或 “ac”,因为 b 被认为是可选的
^Mission: successful$ ^(hat)$ (美元符号) 来描述一行的开始和结束,这里只匹配以 “Mission” 开头并以 “successful” 结尾的完整字符串
^(file_.*)\.pdf$ 通过定义字符组 (groups of characters)(),一对括号内的任何子模式 (subpattern) 都将被捕获 (capture) 为一个组 (group),这里匹配了所有file_开头,.pdf结尾的字符串,都是只捕获了文件名到字符组,没有捕获.pdf
^(IMG(\d+))\.png$ 嵌套组,这里捕获了文件名和日期((假设是IMG20230305.png,组1IMG20230305,组2则是20220305)
`(cats dogs)` 条件模式 cats或者dogs
\D 表示任何非数字字符
\W 表示任何非空白字符
\S 表示任何非字母或数字字符

进阶

语法 作用 名称
\0\1\2…. 0 表示整个模式匹配到的文本,\1 表示捕获的第一个组、\2 表示捕获的第二个组以此类推。 反向引用 back referencing)或者回溯引用
(?=exp) 指定后缀 零宽度正预测先行断言 zero-width positive lookahead assertion
(?<=exp) 指定前缀 零宽度正回顾后发断言 zero-width positive lookbehind assertion
(?!exp) 指定后缀不能是 零宽度负预测先行断言 zero-width negative lookahead assertion
(?<!exp) 指定前缀不能是 零宽度负回顾后发断言 zero-width negative lookbehind assertion
`(?:cats dogs`) 捕获组的基础上,在左括号的右侧加上 ?:,不捕获组 非捕获组(non-capturing groups)
*? 重复任意次,但尽可能少重复 非贪婪匹配,或者称为懒惰匹配
+? 重复 1 次或更多次,但尽可能少重复 非贪婪匹配,或者称为懒惰匹配
?? 重复 0 次或 1 次,但尽可能少重复 非贪婪匹配,或者称为懒惰匹配
{n,m}? 重复 n 到 m 次,但尽可能少重复 非贪婪匹配,或者称为懒惰匹配
{n,}? 重复 n 次或更多次,但尽可能少重复 非贪婪匹配,或者称为懒惰匹配

参考链接

  1. RegexOne 中文 - 通过简单的交互式练习来学习正则表达式 (imageslr.github.io)
  2. RegexOne - Learn Regular Expressions - Lesson 1: An Introduction, and the ABCs