PHP正则表达式30分钟入门教程
三个常用的知识点:
1、惰性匹配:正则引擎默认是贪婪的,若要最少重复的话,需要用到惰性匹配符 “?”
懒惰限定符
代码/语法 |
说明 |
*? | 重复任意次,但尽可能少重复 |
+? | 重复1次或更多次,但尽可能少重复 |
?? | 重复0次或1次,但尽可能少重复 |
{n,m}? | 重复n到m次,但尽可能少重复 |
{n,}? | 重复n次以上,但尽可能少重复 |
参考:http://deerchao.net/tutorials/regex/regex.htm#greedyandlazy
2、不捕获性匹配: 一方面不占用反向应用组号,另一方面提高了匹配效率
(?:exp) // 匹配exp,不捕获匹配的文本,也不给此分组分配组号
参考:http://deerchao.net/tutorials/regex/regex.htm#backreference
3、PHP正则表达式模式修饰符详解
模式修正符号 | 功能描述 |
---|---|
i | 【忽略大小写】在和正则匹配是不区分大小写 |
m |
【多行模式】 说法1:启用的话,^和$将匹配行的开始于结束;不启用的话,^和$将匹配整个字符串的开始于结束;
说法2:将字符串视为多行。默认的正则开始“^”和结束“$”将目标字条串作为一单一的一“行”字符(甚至其中包括换行符也是如此)。如果在修饰符中加上“m”,那么开始和结束将会指点字符串的每一行的开头就是“^”结束就是“$”。 |
s |
【单行模式】 说法1:句点(.)可以匹配任意字符,包括换行符(\n);
说法2:如果设定了这个修正符,那么,被匹配的字符串将视为一行来看,包括换行符,换行符将被视为普通字符串。 |
x |
【忽略空白】 说法1:启用的话,将会忽略正则表达式中的空白字符(空格,换行等),并且会忽略(#注释)格式的内联注释。在次模式下,任然可以使用\s等元字符来匹配空白字符。
说法2:忽略空白,除非进行转义的不被忽略。 |
e |
只用在preg_replace()函数中,在替换字符串中逆向引用做正常的替换,将其(即“替换字符串”)作为PHP代码求值,并用其结果来替换所搜索的字符串。
注意:这个参数不推荐使用了,相关文章如下: |
A | 如果使用这个修饰符,那么表达式必须是匹配的字符串中的开头部分。比如说”/a/A”匹配”abcd”。 |
D | 模式中的$字符权匹配目标字符的结尾。没有此选项时,如果最后一个字符是换行符的话,美元符号也会匹配此字符之前。如果设定了修正符m则忽略此项。 |
E | 与”m”相反,如果使用这个修饰符,那么”$”将匹配绝对字符串的结尾,而不是换行符前面,默认就打开了这个模式。 |
U | 贪婪模式,和问号的作用差不多,最大限度的匹配就是贪婪模式。 |
代码 | 说明 |
---|---|
. | 匹配除换行符(\r\n,\r,\n)以外的任意字符 |
\w | 匹配字母或数字或下划线或汉字 |
\s | 匹配任意的空白符,包括空格、制表符(Tab)、换行符、中文全角空格等 |
\d | 匹配数字 |
\b | 匹配单词的开始或结束 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |