开始与结束

例:/(.+?)/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单词