当前位置: 首页 > 文章教程  > 计算机与互联网 > 网络编程

15.3PHP中的POSIX扩展正则表达式函数

9/17/2020 9:26:54 PM 人评论

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所示。

图 15-1 在程序中使用函数ereg

这里强调一点,函数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 在程序中使用函数eregi()

相关教程

共有条评论 网友评论

验证码: 看不清楚?