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所示。
共有条评论 网友评论