整理了正则表达式的元字符、量词、字符边界、分组、选择与引用,以及常用正则汇总。
# 是什么?
- 处理文本的工具
- 记录文本规则的代码
# 解决什么问题?
- 检测文本是否符合我们的需求
- 从文本中提取我们需要的数据
- 将文本中符合规则的字符串替换成新字符串
# 单个字符(元字符)
字符 | 说明 |
---|---|
普通字符 | 例如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