跳转至

正则表达式-常用

php中:

/g 表示该表达式将用来在输入字符串中查找所有可能的匹配,返回的结果可以是多个。如果不加/g最多只会匹配一个
/i 表示匹配的时候不区分大小写,这个跟其它语言的正则用法相同
/m 表示多行匹配。什么是多行匹配呢?就是匹配换行符两端的潜在匹配。影响正则中的^$符号,多行模式^,$可以匹配每行的开头和结尾
/s 与/m相对,单行模式匹配。
/e 可执行模式,此为PHP专有参数,例如preg_replace函数。
/x 忽略空白模式。
这里有值得注意的一点,这些修饰符是可以混合使用的。例如 /ig、/ie等

贪婪匹配和非贪婪匹配:

贪婪匹配:就是匹配尽可能多的字符。 比如,正则表达式中m.*n,它将匹配最长以m开始,n结尾的字符串。如果用它来搜索manmpndegenc的话,它将匹配到的字符串是manmpndegen而非man。可以这样想,当匹配到m的时候,它将从后面往前匹配字符n。

懒惰匹配:就是匹配尽可能少的字符。 有的时候,我们需要并不是去贪婪匹配,而是尽可能少的去匹配。这时候,就需要将其转为惰性匹配。怎样将一个贪婪匹配转为惰性匹配呢?只需要在其后面添加一个”?”即可。如m.*?n将匹配manmpndegenc,匹配到的字符串是man

函数符 描述
*? 零次或多次,但尽可能少的匹配
+? 一次或多次,但尽可能少的匹配
?? 0次或1次,但尽可能少的匹配
{n,}? 至少n次,但尽可能少的匹配
{n,m}? n到m次 ,但尽可能少的匹配

常见例子:

^\w+$ \w中\w表示字符类(包括大小写字母,数字,下划线),其中的""表示,以这个字符类中字符开头。后面的+号的作用在前一个字符上,即\w+,表示一个或多个\w,最少一个,而后面的"$"号,表示限定以\w结尾
/\b([a-z]+) \1\b/gi 一个单词连续出现的位置。
/(\w+):\/\/([/:]+)(:\d*)?([# ]*)/ 将一个URL解析为协议、域、端口及相对路径。
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/ 定位章节的位置。
/[-a-z]/ a至z共26个字母再加一个-号。
/ter\b/ 可匹配chapter,而不能匹配terminal。
/\Bapt/ 可匹配chapter,而不能匹配aptitude。
/Windows(?=95 |98 |NT )/ 可匹配Windows95或Windows98或WindowsNT,当找到一个匹配后,从Windows后面开始进行下一次的检索匹配。
/^\s*$/ 匹配空行。
/\d{2}-\d{5}/ 验证由两位数字、一个连字符再加 5 位数字组成的 ID 号。
/<\s(\S+)(\s[^>])?>[\s\S]<\s\/\1\s*>/ 匹配 HTML 标记。