正则表达式书写指南

最近在做 Markdown 转 UBB (Discuz编辑器) 的一个PHP的工具,运用到了正则。故复习了一遍。

基本语法

1. 界定符

表示一个正则表达式的开始和结束

2. 原子

可见原子

  • 中文使用 unicode 编码匹配
  • 正则表达式中的关键字,需要加\转义
  • 其他的直接使用可见的字符

不可见原子

  • 空格 直接打空格 即可
  • 制表符 \t
  • 回车 \n (匹配的时候,看不见)

3. 元字符

原子的筛选方式

  • | 匹配两个或者多个分支选择;
  • [] 匹配方括号中的任意一个原子;
  • [^] 匹配除方括号中的原子之外的任意字符;

原子的集合

  • . 匹配除换行符之外的任意字符
  • \d 匹配任意一个十进制数字,[0-9]
  • \D 匹配任意一个非十进制数字,[^0-9]
  • \s 匹配一个不可见原子,[\f\n\r\t\v]
  • \S 匹配一个可见原子,[^\f\n\r\t\v]
  • \w 匹配任意一个数字、字母或下划线,[0-9a-zA-Z_]
  • \W匹配任意一个非数字、字母或下划线,[^0-9a-zA-Z_]

4. 量词

  • {n} 表示其前面的原子恰好出现n次
  • {n,} 表示其前面的原子最少出现了n次
  • {n,m} 表示其前面的原子最少出现了n次,最多出现了m次
  • * 匹配0次、1次或者多次其之前的原子,{0,}
  • + 匹配1次或者多次其之前的原子,{1,}
  • ? 匹配0次或者1次其之前的原子,{0,1}

5. 边界控制

  • ^ 匹配字符串开始的位置
  • $ 匹配字符串结束的位置

6. 模式单元

  • ()匹配其中的整体为一个原子

修正模式

1. 匹配模式

  • 贪婪匹配: 匹配结果存在歧义时取其长
  • 懒惰匹配: 匹配结果存在歧义时取其短

默认使用的是 贪婪模式,开启 懒惰模式U

2.常见的模式修正

  • U/u 懒惰模式/贪婪模式
  • i 忽略英文字母大小写
  • x 忽略空白
  • s . 匹配包括换行的所以字符
  • e 留着

附录