正则表达式总结笔记

8/21/2022 正则

整理了正则表达式的元字符、量词、字符边界、分组、选择与引用,以及常用正则汇总。

# 是什么?

  • 处理文本的工具
  • 记录文本规则的代码

# 解决什么问题?

  • 检测文本是否符合我们的需求
  • 从文本中提取我们需要的数据
  • 将文本中符合规则的字符串替换成新字符串

# 单个字符(元字符)

字符 说明
普通字符 例如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) 匹配字符abc并放到分组中
(abc)\1 匹配字符串abc并放到分组中,引用分组1,也就是匹配abcabc
(?:exp) 匹配字符串exp但是不放到分组中
(?=exp) 匹配exp前面的位置,例如
/foo(?=bar)/gm
foobar foobaz
能匹配foobar中的foo,不能匹配foobazfoo
(?<=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进行的,有些分组语法可能在其他语言中不支持。

# 相关网站

# 常用正则汇总

常用正则汇总

🕑 最后更新时间: 2022-08-21 22:01