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

15.4.2返回与模式匹配的数组单元的正则表达式函数

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

15.4.2返回与模式匹配的数组单元的正则表达式函数

15.4.2 返回与模式匹配的数组单元的正则表达式函数

从本小节开始讲述PERL兼容的正则表达式函数,这类函数中所使用的模式极其类似PERL语言。表达式应被包含在定界符中,如斜线(/)。这就是说,正则表达式作为参数传入这些函数时,需要将正则表达式限定在//之内。例如:/<\/\w+>/,而/href='(.*)'就不是一个合法的PERL兼容正则表达式,因为它缺少结束界定符/。任何不是字母、数字或左斜杠(\)的字符都可以作为界定符。如果作为界定符的字符必须被用在表达式本身中,则需要用反斜线转义。

第一个要介绍的是函数preg_grep(),该函数返回与模式匹配的数组元素。函数preg_grep()的语法如下所示。


array preg_grep(string$pattern,array$input[,int$flag])


该函数返回一个数组,其中包括了参数$input数组中与给定的参数$pattern模式相匹配的元素。第3个参数$flag是可选的,如果其传入值为PREG_GREP_INVERT,那么函数preg_grep()会返回输入数组中,不匹配给定pattern的单元。代码15-8演示了该函数的用法。

代码15-8 在程序中使用PERL兼容的正则表达式函数preg_grep()15-8.php


01 <?php

02 $test_preg=array(

03 "AK47",

04 "163.com",

05 "happy new year!",

06 "EX0000",

07 "007 in USA",

08 "abc123",

09 "TEST-abc-315",

10 "123654789",

11 "Euapa00!"

12 );//定义字符串数组

13

14 echo"<b>原数组:</b>";

15 echo"<pre>";

16 print_r($test_preg);

17 echo"</pre>";

18

19 $preg_arr=preg_grep("/^[A-Z].*[0-9]$/",$test_preg);//传入正则表达式给函数preg_grep()

20 echo"<br>";

21 echo"<b>将原数组中以任意大写字母开头的、中间任意个字符、最后以数字结尾的字符串找出:</b>";

22 echo"<pre>";

23 print_r($preg_arr);//输出匹配的元素

24 echo"</pre>";

25 ?>


【代码解析】这段代码从一个数组中找出一些元素,这些元素匹配以任意大写字母开头、中间含有任意个字符、最后以数字结尾。满足这样匹配的正则表达式可以是^[A-Z].*[0-9]$,因为这个表达式将要作为PERL兼容的正则表达式函数,因此需要在其前后加上界定符,如代码的第19行所示。所以,最终传入给函数preg_grep()的正则表达式参数是:/^[A-Z].*[0-9]$/。

函数preg_grep()会根据传入的正则表达式,匹配原数组中各单元的元素,将匹配正则表达式的元素值存入数组返回。代码15-8的执行结果如图15-8所示。

图 15-8 使用函数preg_grep()找出匹配模式的数组单元

调用该函数时,如果可选的第3个参数的传入值为PREG_GREP_INVERT,那么该函数会将数组中不匹配模式的单元返回。例如,将代码15-8的第19行改为如下所示的代码。


$preg_arr=preg_grep("/^[A-Z].*[0-9]$/",$test_preg,PREG_GREP_INVERT);


然后将第21行的说明信息稍加修改,再执行代码15-8,就会看到如图15-9所示的结果。

图 15-9 调用函数preg_grep()时传入参数PREG_GREP_INVERT

相关教程

共有条评论 网友评论

验证码: 看不清楚?