开始与结束
例:/(.+?)/g
最前面的“/”与最后面的“/”是分隔符,表示正则表达式的开始与结束。
- /g 表示该表达式将用来在输入字符串中查找所有可能的匹配,返回的结果可以是多个。如果不加/g最多只会匹配一个
- /i 表示匹配的时候不区分大小写,这个跟其它语言的正则用法相同
- /m 表示多行匹配。什么是多行匹配呢?就是匹配换行符两端的潜在匹配。影响正则中的^$符号
- /s 与/m相对,单行模式匹配。
- /e 可执行模式,此为PHP专有参数,例如preg_replace函数。
- /x 忽略空白模式。
这里有值得注意的一点,这些修饰符是可以混合使用的。例如 /ig、/ie等。
标准字符集合
| 写法 | 表示 |
|---|---|
| \n | 换行符 |
| \t | 制表符 |
| \^,\$,\( …… | 代表这些字符本身 |
| \d | 0~9中的任意一个数字 |
| \w | 任意一个字母或数字或下划线 |
| \s | 空格 换行符 制表符等空白符 |
| . | 匹配任意一个字符(不包括换行),如果要匹配包括\n在内的所有字符一般用[\s\S] |
注意大小写,一般来说大写表示取反,比如\d表示数字 \D就表示非数字的字符
自定义字符集合
使用方括号来标识匹配方式
| 写法 | 表示 |
|---|---|
| [abc@] | a或b或c或@中的任意一个 |
| [^369] | 除了3,6,9之外的任意字符,^在方括号里面表示取反,在方括号外面表示字符开头 |
| [f-ka-n] | f到k之前的任意字符,a到n的任意字符 |
| [\d.\-+] | 表示数字或点.或减号或加号 |
正则表达式的特殊符号放到方括号里就不特殊了,除了^,-
方括号表示表示一次
而圆括号()则可以将这些方括号的表示字符组合起来
量词
| 写法 | 表示 |
|---|---|
| {n} | 修饰前一个表示的次数,比如\d{3},表示三个数字 |
| {n,m} | 最少n次最多m次 |
| {n,} | 最少n次 |
| ? | 出现0次或1次,也可以表示为贪婪模式 |
| + | 至少出现1次 |
| * | 不出现或出现任意次 |
字符边界
放在方括号外面
| 写法 | 表示 |
|---|---|
| ^ | 字符串开头 |
| $ | 字符串结尾 |
| \b | 匹配单词边界,比如hello\b,表示hello前后不全是\w |
选择与捕获组
| 写法 | 表示 |
|---|---|
| | | 表示或,比如a|b a或b |
| () | 捕获组,括号里面作为整体表示 |
| (?:exp) | 非捕获组,反向表示括号里面的表达式,比如(?:(ab))匹配非ab字符串的 |
| \数字 | 每一对()会分配一个编号,根据左括号的顺序从1开始编号,对已捕获的字符串进行引用 |
比如[ab]{2}\1会匹配到重复的两个字符的单词,比如gogo
预搜索
表达式本身不会被匹配
| 写法 | 表示 |
|---|---|
| (?=exp) | 断言自身位置后面能匹配表达式 |
| (?<=exp) | 断言自身位置前面能匹配表达式 |
| (?!exp) | 断言自身位置后面不能匹配表达式 |
| (?<!exp) | 断言自身位置前面能匹配表达式 |
有一个字符串为going doing eating
可以使用正则表达式为[a-z]+(?=ing) 可以匹配到go do eat单词
