文章教程

15.4.4进行全局正则表达式匹配的函数

9/17/2020 9:26:54 PM 人评论 次浏览

15.4.4 进行全局正则表达式匹配的函数

和函数preg_match()极为类似的一个函数是preg_match_all(),该函数进行全局正则表达式匹配。它的语法如下所示。


int preg_match_all(string$pattern,string$subject,array$matches[,int$flag])


该函数在参数$subject中搜索所有与参数$pattern所给出的正则表达式匹配的内容,并将结果以参数$flag指定的顺序放到参数数组$matches中。该函数搜索到第一个匹配项之后,会继续进行匹配搜索,接下来的搜索从上一个匹配项末尾开始,这也是该函数preg_match()的一个区。该函数返回整个模式匹配的次数(可能为零),如果出错返回FALSE。代码15-10演示了该函数的用法,该代码演示了如何在字符串中搜索匹配的HTML标记。

代码15-10 全局正则表达式匹配函数preg_match_all()的应用15-10.php


01 <?php

02 $html="<b>粗体字符</b><a href=howdy.html>可点击的连接</a>";//定义一个复杂点的变量

03

04 preg_match_all("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/",$html,$matches);//进行全局正则表达式匹配

05

06 for($i=0;$i<count($matches[0]);$i++)

07 {

08 echo"匹配:".$matches[0][$i]."\n";

09 echo"第一部分:".$matches[1][$i]."\n";

10 echo"第二部分:".$matches[3][$i]."\n";

11 echo"第三部分:".$matches[4][$i]."\n\n";

12 }

13 ?>


【代码解析】这段代码中的\\2是一个逆向引用的例子,其在PCRE中的含义是必须匹配正则表达式本身中第二组括号内的内容,在代码15-10中就是([\w]+)。因为字符串在双引号中,所以需要多加一个反斜线。通过浏览器查看该程序的执行结果,如图15-11所示。单从这个页面还看不出程序的执行结果,需要查看该页面的源代码,才能更清楚地了解程序的执行结果。在浏览器中查看该页面的源代码,如图15-12所示。

图 15-11 在程序中使用函数preg_match_all()
图 15-12 代码15-10执行结果的源代码形式

从这个源代码中,读者可以更清楚地看到,函数preg_match_all()是如何使用的,以及该函数的执行结果。

教程类别