正则表达式书写指南
最近在做 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
留着