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所示。
从这个源代码中,读者可以更清楚地看到,函数preg_match_all()是如何使用的,以及该函数的执行结果。
共有条评论 网友评论