第六章:第9节 正则表达式学习(二)

更新于:2017-05-06 18:19:21

6、小括号“()”的用法——子表达式


我们上节学习的那么多符号只能作用于一个字符,一个字符就是一个整体,如果把多个字符当成一个整体就需要用小括号包起来。看这个示例:

1.png

1.png

“+”的作用是1个或多个,字符“e”后面必须至少有一个“w”,所以它匹配了三次。


如果加上小括号:

1.png

1.png

符号“+”作用于的字符是“ew”,把“ew”看成一个整体,不再只是“w”,至少有一个“ew”,所以它匹配的结果是“ewew”、“ew”。


preg_match_all函数也会返回小括号匹配的内容,所以上图中数组的下标“1”中的两个值是小括号里两次匹配的字符。

1.png

1.png

用小括号包起来的称为子表达式,只要您理解能力够强,子表达式里面可以继续包子表达式,想包多少层都可以。正则表达式学习的难点主要在子表达式这块,有三层子表达式的正则就算高难度的了。


7、“|”的用法


其实就是“或”的意思。

1.png

1.png

也可以在中括号里用“|”

1.png

1.png

这两种的写法区别,一个用了子表达式,一个用了集合。在集合里不用“|”,显示的结果也是一样的:

1.png

1.png

根据大家的习惯和子表达式的重要性,写正则表达式用到小括号的次数远比中括号用的多。小括号里匹配的字符能单独获取,正则表达式有很多用途不是获取整个匹配的字符,而是只获取小括号里匹配的字符。


第四章41节楠神介绍URL重写与伪静态时,展示过一个函数(通过URL获取ID值),返回的数字值就是从正则表达式子表达式里匹配获取的。


“|”也多用于小括号里。


8、“.”的作用


匹配除 "\n" 之外的任何单个字符。比“\w”匹配的范围广的多,“.”在正则表达式里用的还挺多。

1.png

1.png


学到这,是不是觉得很多字符(+、.、?、*)在正则表达式里都有特殊的意义,对于这些字符我们称为正则表达式里的符号。如果在正则里我们不让它们作为符号,而只是一个字符,那就需要在这些符号前面加上“\”进行转义。


1.png

1.png

9、正则表达式里的贪婪模式与非贪婪模式


贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。

非贪婪匹配:就是匹配到结果就好,就少的匹配字符。


看演示,贪婪模式:

1.png

1.png

把整个字符全匹配了,怎么让正则表达式变成非贪婪模式?在量词后面直接加上一个问号?就是非贪婪模式。


  量词:{m,n}:m到n个

     *:任意多个

     +:一个到多个

     ?:0或一个

1.png

1.png

获取到一个字符即可返回。


对于正则楠神简单介绍这些,如果看这两节内容依然对正则表达式不知所惑,可去别处查看更详细的教程。正则表达式在各种应用中都会用到,它就是字符串的“公式”,定义了字符串的显示规则,符合规则,即为匹配。大部分编程语言都为正则表达式提供了操作方法或函数,通过正则可以获取到匹配的字符串。


本节学习代码》》》