15.3PHP中的POSIX扩展正则表达式函数
15.3 PHP中的POSIX扩展正则表达式函数
通过前面几章的学习,读者已经认识到,正则表达式可用于复杂字符串的处理。仅仅了解什么是正则表达式和如何创建一个正则表达式,在实际应用中还是无法完成具体工作的。和其他解决问题的办法一样,PHP提供函数完成对正则表达式的支持。PHP有两大类函数支持正则表达式,一类是POSIX扩展函数,另一类是PERL兼容的正则表达式函数。本小结先介绍POSIX扩展正则表达式函数,这些函数如下所示。
❑函数ereg(),字符串的正则匹配函数。
❑函数ereg_replace(),区分大小写的正则表达式替换。
❑函数eregi(),不区分大小写的正则表达式匹配。
❑函数eregi_replace(),不区分大小写的正则表达式替换。
❑函数split(),用正则表达式将字符串分割到数组中。
❑函数spliti(),用正则表达式不区分字母大小写将字符串分割到数组中。
❑函数sql_regcase(),产生用于不区分大小的正则表达式。
下面分4小节分别介绍这些函数的用法。
15.3.1 正则表达式匹配函数
在PHP中完成对正则表达式是否匹配判断的函数是ereg(),该函数的原型如下所示。
int ereg(string$pattern,string$string[,array&regs])
该函数以区分大小写的方式,按参数$pattern(该参数是一个正则表达式)的规则来匹配字符串参数$string。匹配结果所返回的值放在第3个可选数组参数regs之中,regs[0]内容就是原字符串string,regs[1]为第一个合乎规则的字符串,regs[2]就是第二个合乎规则的字符串,依次类推。若调用该函数时,省略参数regs,则只是单纯使用正则表达式做匹配,如果在string中找到pattern模式的匹配,那么该函数返回所匹配字符串的长度,如果没有传递入可选参数regs或者所匹配的字符串长度为0,则本函数返回1。如果没有找到匹配或出错,该函数返回FALSE。代码15-1演示了该函数的用法。
代码15-1 正则表达式匹配函数ereg的使用15-1.php
01 <?php
02 $arr_date=array(
03 "2008-06-01",
04 "2005-0x-10",
05 "12-12-12",
06 "2012-12-2500:10:20",
07 "2011-12-05"
08 );//定义一个日期数组
09
10 for($i=0;$i<5;++$i)//5次循环
11 {
12 $date=$arr_date[$i];//获取日期元素
13 if(ereg("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})",$date,$regs))
14 {
15 echo"日期字符串$date符合"YYYY-MM-DD"格式:";
16 echo"$regs[1].$regs[2].$regs[3]<br/><br/>";
17 }
18 else
19 {
20 echo"<b>日期字符串$date不符合"YYYY-MM-DD"格式的日期字符串</b><br/><br/>";
21 }
22 }
23 ?>
【代码解析】这段代码使用函数ereg(),通过传入原始字符串、一个正则表达式以及参数数组,完成对格式日期(YYYY-MM-DD)的匹配判断,如果匹配正则表达式([0-9]{4})-([0-9]{1,2})-([0-9]{1,2}),该程序会以以DD.MM.YYYY格式显示出该日期。代码15-1的执行结果如图15-1所示。

这里强调一点,函数ereg()对字符串的匹配是区分大小写的。接下来要介绍另外一个正则表达式匹配函数eregi(),它在匹配字符串时是不区分大小写的。该函数的语法如下所示。
int eregi(string$pattern,
string$string[,array&regs])
通过这个语法可以看出,该函数的参数及返回值和函数ereg()完全一样,唯一的区别就是,该函数在匹配字母时是不区分大小写的。代码15-2演示了该函数的用法。
代码15-2 正则表达式匹配函数eregi()的用法15-2.php
01 <?php
02 $arr_str=array(
03 "Python",
04 "php",
05 "Perl",
06 "Ruby"
07 );//定义数组变量
08
09 for($i=0;$i<4;++$i)//4次循环
10 {
11 $str=$arr_str[$i];//获取当前数组元素
12 if(eregi("P|h",$str))//匹配指定字符串
13 {
14 echo""$str"含有P、p、H或h<br/><br/>";
15 }
16 else
17 {
18 echo"<b>"$str"不含P、p、H或h</b><br/><br/>";
19 }
20
21 if(ereg("P",$str))//匹配指定字符
22 {
23 echo"在ereg()中"$str"匹配"P|h"<br/><br/>";
24 }
25 else
26 {
27 echo"<b>在ereg()中"$str"不匹配"P|h"</b><br/><br/>";
28 }
29 }
30 ?>
【代码解析】这段代码分别使用了函数eregi()和ereg()来对字符串做正则表达式匹配。程序中,每次使用的字符串相同,正则表达式也相同,但因为函数ereg()区分大小写的缘故,所以同样的字符串匹配,会有和函数eregi()不同的数据结果。
代码15-2 的执行结果如图15-2所示。

上一篇:15.2.7正则表达式构建实例
下一篇:15.3.2替换匹配字符串的函数