6、小括号“()”的用法——子表达式
我们上节学习的那么多符号只能作用于一个字符,一个字符就是一个整体,如果把多个字符当成一个整体就需要用小括号包起来。看这个示例:
“+”的作用是1个或多个,字符“e”后面必须至少有一个“w”,所以它匹配了三次。
如果加上小括号:
符号“+”作用于的字符是“ew”,把“ew”看成一个整体,不再只是“w”,至少有一个“ew”,所以它匹配的结果是“ewew”、“ew”。
preg_match_all函数也会返回小括号匹配的内容,所以上图中数组的下标“1”中的两个值是小括号里两次匹配的字符。
用小括号包起来的称为子表达式,只要您理解能力够强,子表达式里面可以继续包子表达式,想包多少层都可以。正则表达式学习的难点主要在子表达式这块,有三层子表达式的正则就算高难度的了。
7、“|”的用法
其实就是“或”的意思。
也可以在中括号里用“|”
这两种的写法区别,一个用了子表达式,一个用了集合。在集合里不用“|”,显示的结果也是一样的:
根据大家的习惯和子表达式的重要性,写正则表达式用到小括号的次数远比中括号用的多。小括号里匹配的字符能单独获取,正则表达式有很多用途不是获取整个匹配的字符,而是只获取小括号里匹配的字符。
第四章41节楠神介绍URL重写与伪静态时,展示过一个函数(通过URL获取ID值),返回的数字值就是从正则表达式子表达式里匹配获取的。
“|”也多用于小括号里。
8、“.”的作用
匹配除 "\n" 之外的任何单个字符。比“\w”匹配的范围广的多,“.”在正则表达式里用的还挺多。
学到这,是不是觉得很多字符(+、.、?、*)在正则表达式里都有特殊的意义,对于这些字符我们称为正则表达式里的符号。如果在正则里我们不让它们作为符号,而只是一个字符,那就需要在这些符号前面加上“\”进行转义。
9、正则表达式里的贪婪模式与非贪婪模式
贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。
非贪婪匹配:就是匹配到结果就好,就少的匹配字符。
看演示,贪婪模式:
把整个字符全匹配了,怎么让正则表达式变成非贪婪模式?在量词后面直接加上一个问号?就是非贪婪模式。
量词:{m,n}:m到n个
*:任意多个
+:一个到多个
?:0或一个
获取到一个字符即可返回。
对于正则楠神简单介绍这些,如果看这两节内容依然对正则表达式不知所惑,可去别处查看更详细的教程。正则表达式在各种应用中都会用到,它就是字符串的“公式”,定义了字符串的显示规则,符合规则,即为匹配。大部分编程语言都为正则表达式提供了操作方法或函数,通过正则可以获取到匹配的字符串。