整理了正则表达式的元字符、量词、字符边界、分组、选择与引用,以及常用正则汇总。
# 是什么?
- 处理文本的工具
- 记录文本规则的代码
# 解决什么问题?
- 检测文本是否符合我们的需求
- 从文本中提取我们需要的数据
- 将文本中符合规则的字符串替换成新字符串
# 单个字符(元字符)
| 字符 | 说明 |
|---|---|
| 普通字符 | 例如a、好等单个字符,就是匹配他们本身 |
| . | 除换行符以外任意字符 |
| \s | 空白字符,记忆方法:space |
| \S | 非空白字符 |
| \w | 数字、字母或下划线,记忆方法:word |
| \W | 非数字、字母或下划线 |
| \d | 数字,记忆方法:digit |
| \D | 非数字 |
| [a-z] | 字符序列之一,也可以写[b-d] |
| [A-Z] | 字符序列之一 |
| [0-9] | 字符序列之一,等价于\d |
| [a-zA-Z] | 字符序列之一 |
| [abc] | 字符集合之一 |
| [^abc] | 除了字符集合的以外字符 |
| [^\d] | 除了数字的以外字符,等价于\D |
# 量词
| 字符 | 说明 |
|---|---|
| ? | 重复零次或一次 |
| * | 重复零次或多次 |
| + | 重复一次或多次 |
| {n} | 重复n次 |
| {n,} | 重复n次及以上 |
| {m,n} | 重复m到n次,包含m和n |
# 字符边界
| 字符 | 说明 |
|---|---|
| ^ | 匹配开始 |
| $ | 匹配结尾 |
| \b | 匹配单词边界 |
| \B | 匹配非字符边界 |
# 分组、选择与引用
| 字符 | 说明 |
|---|---|
| (abc) | 匹配字符串abc并放到分组中 |
| (a|b|c) | 匹配字符a、b或c并放到分组中 |
| (abc)\1 | 匹配字符串abc并放到分组中,引用分组1,也就是匹配abcabc |
| (?:exp) | 匹配字符串exp但是不放到分组中 |
| (?=exp) | 匹配exp前面的位置,例如/foo(?=bar)/gm foobar foobaz能匹配 foobar中的foo,不能匹配foobaz的foo |
| (?<=exp) | 匹配exp后面的位置 |
| (?!exp) | 匹配后面跟的不是exp的位置 |
| (?<!exp) | 匹配前面不是exp的位置 |
| (?#comment) | 注释,不影响正则表达式 |
| (?<name>exp) | 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp) |
# 修饰符
| 字符 | 说明 |
|---|---|
| g | 全局匹配 |
| i | 不区分大小写 |
| m | 多行匹配 |
| u | Unicode模式 |
# 转义字符
| 字符 | 说明 |
|---|---|
| \n | 换行符 |
| \t | 制表符,Tab |
| \v | 竖向制表符 |
| \f | 换页符 |
# 其他注意事项
^写在[]外面表示匹配开始,写在里面表示取反[]中不能写分组和选择语法,例如:[(ab)|c]是错误的,其实际含义则是匹配(ab)|c中的一个字符- 本教程是针对PHP进行的,有些分组语法可能在其他语言中不支持。
# 相关网站
- 正则表达式教程——语法篇 (opens new window)
- 正则表达式30分钟入门教程 (opens new window)
- Online regex tester and debugger (opens new window)
- regexper (opens new window)
- Regulex (opens new window)
# 常用正则汇总
🕑 最后更新时间: 2022-08-21 22:01