第10章正则表达式PPT课件

上传人:cn****1 文档编号:591402237 上传时间:2024-09-17 格式:PPT 页数:56 大小:1.61MB
返回 下载 相关 举报
第10章正则表达式PPT课件_第1页
第1页 / 共56页
第10章正则表达式PPT课件_第2页
第2页 / 共56页
第10章正则表达式PPT课件_第3页
第3页 / 共56页
第10章正则表达式PPT课件_第4页
第4页 / 共56页
第10章正则表达式PPT课件_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《第10章正则表达式PPT课件》由会员分享,可在线阅读,更多相关《第10章正则表达式PPT课件(56页珍藏版)》请在金锄头文库上搜索。

1、PHP第10章正则表达式什么是正则表达式正则表达式的组成正则表达式的语法PCRE正则函数目录正则表达式快速入门10.210.2正则表达式语法10.310.3PCRE兼容正则表达式函数10.410.410.110.1什么是正则表达式10.1什么是正则表达式正则表达式(正则表达式(Regular Expression,简称,简称regexp)l是一种描述字符串结构的语法规则l是一个特定的格式化模式,用于验证各种字符串是否匹配(Match)这个特征,进而实现高级的文本查找、替换、截取内容等操作10.1什么是正则表达式举例说明举例说明若想要使Apache服务器解析PHP文件,需要在Apache的配置文

2、件中添加能够匹配出以“.php”结尾的配置“.php$”,添加完成后当用户访问PHP文件时,Apache就会将该文件交给PHP去处理。这里的“.php$”就是一个简单的正则表达式10.1什么是正则表达式正则表达式的发展历史正则表达式的发展历史10.1什么是正则表达式正则表达式的应用范围正则表达式的应用范围l在操作系统(Unix、Linux等)l编程语言(C、C+、Java、PHP、Python、JavaScript等)l服务器软件(Apache、Nginx)10.1什么是正则表达式正则表达式的表现形式正则表达式的表现形式l一种是POSIX规范兼容的正则表达式,包括基本语法BRE(Base Re

3、gular Expression)和扩展语法ERE(Extended Regular Expression)两种规则,用于确保操作系统之间的可移植性,但最终没有成为标准只能作为一个参考。10.1什么是正则表达式正则表达式的表现形式正则表达式的表现形式l另一种是当Perl(一种功能丰富的编程语言)发展起来后,衍生出来了PCRE(Perl Compatible Regular Expressions,Perl兼容正则表达式)库,使得许多开发人员可以将PCRE整合到自己的语言中,PHP中也为PCRE库的使用提供了相应的函数。10.2正则表达式快速入门1.如何使用正则表达式在PHP中,可使用PHP提供

4、的PCRE相关内置函数相关内置函数,根据正则匹配模式完成对指定字符串的搜索和匹配。preg_match()函数函数是最常用的一个函数。10.2正则表达式快速入门1.如何使用正则表达式(1)执行匹配)执行匹配preg_match()函数的第1个参数是正则表达式,第2个参数是被搜索的字符串。$result=preg_match(/web/,phpwebphpweb);var_dump($result);/输出结果:int(1)“/web/”中的“/”是正则表达式的定界符。当函数匹配成功时返回1,匹配失败时返回0,如果发生错误则返回false。10.2正则表达式快速入门1.如何使用正则表达式(2)获

5、取匹配结果)获取匹配结果preg_match()函数的第3个参数用于以数组形式保存匹配到的结果。preg_match(/bad/,bestbadbirdbad,$matches);print_r($matches);/输出结果:Array(0=bad)10.2正则表达式快速入门1.如何使用正则表达式(3)设置偏移量)设置偏移量preg_match(/bc/,abdbc,$matches,PREG_OFFSET_CAPTURE);10.2正则表达式快速入门1.如何使用正则表达式(3)设置偏移量)设置偏移量preg_match()的第4个参数设置为“PREG_OFFSET_CAPTURE”,表示将

6、第一次匹配到指定规则的内容所在位置的偏移量添加到$matches中,待查字符串的开始位置从0开始计算。例如,字符串“abdbc”中的“a”的偏移量是0,“b”字符的位置偏移量为3。10.2正则表达式快速入门2.正则表达式的组成正则表达式定界符元字符文本字符模式修饰符10.2正则表达式快速入门2.正则表达式的组成l元字符元字符是具有特殊含义的字符,如“”、“.”或“*”等l文本字符文本字符就是普通的文本,如字母和数字等。l模式修饰符模式修饰符用于指定正则表达式以何种方式进行匹配,如i表示忽略大小写等。10.2正则表达式快速入门2.正则表达式的组成preg_match(/.*it/, ITheim

7、a); / 匹配结果:匹配结果:0preg_match(/.*it/i, ITheima); / 匹配结果:匹配结果:1示例“.*”用于匹配任意字符,因此正则表达式“/.*it/”可以匹配任意含有“it”的字符串,如“it”、“itheima”等。当添加模式修饰符“i”时,表示可匹配的内容忽略大小写,如所有含“IT”、“It”、“iT”和“it”的字符串都可以。10.2正则表达式快速入门2.正则表达式的组成正则表达式定义了许多元字符用于实现复杂匹配,而若要匹配的内容是这些字符本身时,就需要在前面加上转义字符转义字符“”,如“”、“”等,具体示例如下。preg_match(/, 123456,

8、$matches);print_r($matches);/ 输出结果:输出结果:Array ( 0 = )preg_match(/*/, 123*456, $matches);print_r($matches);/ 输出结果:输出结果:Array ( 0 = * )preg_match(/, 123456, $matches);print_r($matches);/ 输出结果:输出结果:Array ( 0 = )10.2正则表达式快速入门3.获取所有匹配结果在PHP中,preg_match_all()函数函数的功能与preg_match()函数类似,区别在于lpreg_match()函数在第一

9、次匹配成功后就停止查找lpreg_match_all()函数会一直匹配到最后才停止,获取到所有相匹配的结果10.2正则表达式快速入门3.获取所有匹配结果(1)执行匹配)执行匹配利用preg_match_all()执行正则表达式匹配,示例代码如下。$result=preg_match_all(/web/,phpwebphpweb);var_dump($result);/输出结果:int(2)第1个参数表示正则表达式第2个参数是被搜索的字符串执行成功时返回匹配的次数,返回0表示没有匹配到;发生错误返回false。10.2正则表达式快速入门3.获取所有匹配结果(2)获取匹配结果)获取匹配结果preg

10、_match_all()函数的第3个参数可以保存所有匹配到的结果,具体示例如下preg_match_all(/na/,banana,$matches);print_r($matches);/输出结果:Array(0=Array(0=na1=na)10.2正则表达式快速入门3.获取所有匹配结果(2)获取匹配结果)获取匹配结果接下来,修改上述示例,将preg_match_all()函数的第4个参数设置为PREG_SET_ORDER,然后查看匹配结果。preg_match_all(/na/,banana,$matches,PREG_SET_ORDER);/输出结果:Array(0=Array(0=n

11、a)1=Array(0=na)print_r($matches);10.3正则表达式语法1.定位符与选择符定位符定位符用于确定字符在字符串中的具体方位,正则表达式中l定位符“”可用于匹配字符串开始的位置l定位符“$”用于匹配字符串结尾的位置10.3正则表达式语法1.定位符与选择符$subject=Itsanicedaytoday;/匹配字符串开始的位置preg_match(/It/,$subject,$matches);print_r($matches);/输出结果:Array(0=It)/匹配字符串结束的位置preg_match(/today$/,$subject,$matches);pri

12、nt_r($matches);/输出结果:Array(0=today)示例10.3正则表达式语法1.定位符与选择符若要查找的条件有多个,只要其中一个满足即可成立时,可以用选择符选择符“|”。该字符可以理解为“或”。preg_match_all(/34|56|78/,123456,$matches);print_r($matches);/输出结果:Array(0=Array(0=341=56)10.3正则表达式语法2.字符范围与反斜线正则表达式中,对于匹配某个范围内的字符,可以用中括号中括号“ ”和连字符和连字符“-”来实现。且在中括号中还可以用反义字符反义字符“”,表示匹配不在指定字符范围内的

13、字符。10.3正则表达式语法2.字符范围与反斜线下面以使用以使用preg_match_all()函数匹配函数匹配“AbCd”为例为例。示例示例说明说明匹配结果匹配结果abc匹配字符a、b、cbabc匹配除a、b、c以外的字符A、C、dB-Z匹配字母BZ范围内的字符Ca-z匹配字母az范围外的字符A、Ca-zA-Z0-9匹配大写字母、小写字母和数字09范围内的字符A、b、C、d10.3正则表达式语法2.字符范围与反斜线在正则表达式中,“”除了前面讲解的可作转义字符外,还具有其他功能。例如,匹配不可打印的字符、指定预定义字符集匹配不可打印的字符、指定预定义字符集等。字符字符说明说明d任意一个10进

14、制数字,相当于0-9D任意一个非10进制数字w任意一个单词字符,相当于a-zA-Z0-9_W任意一个非单词字符s任意一个空白字符(如空格、水平制表符等)10.3正则表达式语法2.字符范围与反斜线字符字符说明说明S任意一个非空白字符b单词分界符,如“bgra”可以匹配“best grade”的结果为“gra”B非单词分界符,如“Bade”可以匹配“best grade”的结果为“ade”xhh表示hh(16进制2位数字)对应的ASCII字符,如“x61”表示“a”利用预定的字符集可以很容易的完成某些正则匹配例如大写字母、小写字母和数字可以使用“w”直接表示若要匹配0到9之间的数字可以使用“d”表

15、示有效的使用反斜线的这些功能可以使正则表达式更加简洁,便于阅读10.3正则表达式语法3.字符的限定与分组l点字符点字符“.”用于匹配一个任意字符l限定符限定符(?、+、*、 )用于匹配某个字符连续出现的次数10.3正则表达式语法3.字符的限定与分组字符字符说明说明示例示例结果结果.匹配一个任意字符p.P可匹配php、pap、pup等?匹配前面的字符零次或一次hone?y可匹配honey和hony+匹配前面的字符一次或多次co+me可匹配范围从come到come*匹配前面的字符零次或多次co*me可匹配范围从cme到comen匹配前面的字符n次ne2d只能匹配needn,匹配前面的字符最少n次n

16、e2,d可匹配范围从need到nedn,m匹配前面的字符最少n次,最多m次lug0,2可匹配lu、lug和lugg三种情况10.3正则表达式语法3.字符的限定与分组下面演示如何使用正则完成一个11位数字组成的手机号位数字组成的手机号的验证。要求要求手机号以1开头,第2位数字是3、4、5、7、8中的一个,剩余的数字可以是09之间的任意数字。具体实现如例10-1所示。具体案例请参考教材10.3正则表达式语法3.字符的限定与分组当点字符和限定符连用点字符和限定符连用时,可以实现匹配指定数量范围指定数量范围的任意字符。例如,“pre.*end$”可以匹配从pre开始到end结束,中间包含零个或多个任意

17、字符的字符串贪婪匹配惰性匹配10.3正则表达式语法3.字符的限定与分组l贪婪表示匹配尽可能多的字符,默认情况下是贪婪匹配l惰性表示匹配尽可能少的字符l若想要实现惰性匹配,需在上一个限定符的后面加上“?”符号10.3正则表达式语法3.字符的限定与分组/ 贪婪匹配贪婪匹配preg_match(/p.*h/, phphphph, $matches);print_r($matches);/ 输出结果:输出结果:Array ( 0 = phphphph )/ 懒惰匹配懒惰匹配preg_match(/p.*?h/, phphphph, $matches);print_r($matches);/ 输出结果:

18、输出结果:Array ( 0 = ph )贪婪匹配时,会获取最先出现的p到最后出现的h,即可获得匹配结果为“phphphph”;懒惰匹配时,会获取最先出现的p到最先的出现的h,即可获取匹配结果“ph”。10.3正则表达式语法3.字符的限定与分组在正则表达式中,括号字符括号字符“()”有两个作用:改变限定符的作用范围分组10.3正则表达式语法3.字符的限定与分组 改变作用范围前改变作用范围前正则表达式:正则表达式:firm|sh可匹配的结果:可匹配的结果:firm、sh 改变作用范围后改变作用范围后正则表达式:正则表达式:fi(rm|sh)可匹配的结果:可匹配的结果:firm、fish改变限定符

19、的作用范围小括号实现了匹配小括号实现了匹配firm和和fish,而如果不使用小括号,则变成了,而如果不使用小括号,则变成了firm和和sh10.3正则表达式语法3.字符的限定与分组 分组前分组前正则表达式:正则表达式:bana2可匹配的结果:可匹配的结果:banaa 分组后分组后正则表达式:正则表达式: ba(na)2可匹配的结果:可匹配的结果:banana分组未分组时,表示匹配未分组时,表示匹配2个个a字符;而分组后,表示匹配字符;而分组后,表示匹配2个个“na”字符串字符串10.3正则表达式语法3.字符的限定与分组这里以常见的“年年-月月-日日”形式的日期格式匹配形式的日期格式匹配为例进行

20、讲解。其中年份可以从1000到9999,月份从1到12,天数从1到31。不考虑较复杂的不同月份天数不同的问题。如例10-2所示。具体案例请参考教材10.3正则表达式语法4.模式修饰符模式符模式符说明说明示例示例可匹配结果可匹配结果i模式中的字符将同时匹配大小写字母/con/iCon、con、cOn等m目标字符串视为多行/P.*/mPHPnPCs将字符串视为单行,换行符作为普通字符/Hi.*my /sHinmyx将模式中的空白忽略/n e e d/xneedA强制仅从目标字符串的开头开始匹配/good/A相当于/good/D模式中$元字符仅匹配目标字符串的结尾/it$/D忽略最后的换行U匹配最近

21、的字符串/U匹配最近一个字符串若忽略大小写,除使用“|”和“ ”外,还可直接在定界符外添加i模式符若忽略目标字符串中的换行符,可以使用模式修饰符s等10.3正则表达式语法4.模式修饰符除此之外,模式修饰符模式修饰符还可以根据实际需求多个组合多个组合在一起使用。例如,既要忽视大小写又要忽视换行,则可以使用直接使用is。在编写多个模式修饰符时没有顺序要求。10.4PCRE兼容正则表达式函数1.preg_grep()函数对于数组中的元素正则匹配,数组中的元素正则匹配,经常使用preg_grep()函数,具体使用示例如下。$arr = Tom Lucy, PHP, pig cat, C;$matche

22、s = preg_grep(/a-zA-Z*$/, $arr);print_r($matches);/ 输出结果:输出结果:Array( 1 = PHP 3 = C )10.4PCRE兼容正则表达式函数1.preg_grep()函数第1个参数表示正则表达式模式第2个参数表示待匹配的数组默认情况下,返回值是符合正则规则的数组,同时保留原数组中的键值关系第3个参数设置为PREG_GREP_INVERT,可获取不符合正则规则的数组10.4PCRE兼容正则表达式函数2.preg_replace()函数作用作用:如果想通过正则表达式完成字符串的搜索和替换对比对比:与字符串处理函数str_replace(

23、)相比,preg_replace()函数的功能更加强大10.4PCRE兼容正则表达式函数2.preg_replace()函数(1)替换指定内容执行过程:搜索第3个参数中符合第1个参数正则规则的内容,然后使用第2个参数进行替换。其中,第3个参数的数据类型决定着返回值的类型。第3个参数是字符串第3个参数是数组返回字符串返回数组10.4PCRE兼容正则表达式函数2.preg_replace()函数$str = My Name is Tom;$pattern = /(.*)/;/ 匹配规则匹配规则$replace = XXX;/ 替换的内容替换的内容/ 输出结果:输出结果:My Name is XXX

24、echo preg_replace($pattern, $replace, $str); 替换字符串中匹配的内容10.4PCRE兼容正则表达式函数2.preg_replace()函数$arr = Php, Python, c;$pattern = /p/i;/ 匹配规则匹配规则$replace = p;/ 替换的内容替换的内容/ 输出结果:输出结果:Array ( 0 = php 1 = python 2 = c )print_r(preg_replace($pattern, $replace, $arr); 替换数组中匹配的内容10.4PCRE兼容正则表达式函数2.preg_replace(

25、)函数$str = The quick brown fox jumps over the lazy dog.;$pattern = /quick/, /brown/, /fox/; / 匹配规则数组匹配规则数组$replace = slow, black, bear; / 替换内容数组替换内容数组/ 输出结果:输出结果:The slow black bear jumps over the lazy dog.echo preg_replace($pattern, $replace, $str); 正则与替换内容皆为数组10.4PCRE兼容正则表达式函数2.preg_replace()函数(2)限

26、定替换次数l默认允许的替换次数是所有符合规则的内容,其值是-1,表示无限次l可以根据实际情况设置允许替换的次数10.4PCRE兼容正则表达式函数2.preg_replace()函数(2)限定替换次数$str = 生如夏花之绚烂,死如秋叶之静美生如夏花之绚烂,死如秋叶之静美;$pattern = /之之/;$replace = 的的;/ 输出结果:生如夏花的绚烂,死如秋叶之静美输出结果:生如夏花的绚烂,死如秋叶之静美echo preg_replace($pattern, $replace, $str, 1);$str中有两处符合正则$pattern的匹配,但是preg_replace()函数的第

27、4个参数将替换的次数指定为1次。因此,最后的输出结果中就只替换了一次“之”字。10.4PCRE兼容正则表达式函数2.preg_replace()函数(3)获取替换的次数当需要替换的内容很多时,若需要了解preg_replace()函数具体完成了几次指定规则的替换,可通过第5个可选参数保存完成替换的总次数。preg_replace($pattern, $replace, $str, -1, $count);echo $count; / 输出结果:输出结果:5需要注意的是,该函数的第需要注意的是,该函数的第5个参数个参数是一个引用传参的变量是一个引用传参的变量10.4PCRE兼容正则表达式函数3.

28、preg_split()函数l根据正则表达式完成字符串的分割l与explode()函数的区别是,preg_split()函数可完成复杂字符串的分割操作。例如多个分割符。10.4PCRE兼容正则表达式函数3.preg_split()函数(1)按照规则分割下面的示例演示了如何按照字符串中的“”和“.”两种分隔符进行分割。$arr = preg_split(/,./, );print_r($arr); / 输出结果:输出结果:Array( 0 = abc 1 = 163 2 = com )第1个参数为正则表达式分隔符第2个参数表示待分割的字符串10.4PCRE兼容正则表达式函数3.preg_spli

29、t()函数(2)指定分割次数在使用正则匹配方式分割字符串时,可以指定字符串分割的次数$arr = preg_split(/a/, banana, 2);print_r($arr); / 输出结果:输出结果:Array( 0 = b 1 = nana )当指定字符串分割次数后,若指定的次数小于实际字符串中符合规则分割的次数,则最后一个元素中包含剩余的所有内容。10.4PCRE兼容正则表达式函数3.preg_split()函数(3)指定返回值形式第4个参数指定字符串分割后的数组中是否包含空格、是否添加该字符串的位置偏移量等内容。$str = one, two three;/ 按照空白字符和逗号分割

30、字符串按照空白字符和逗号分割字符串$arr = preg_split(/s,/, $str, -1, PREG_SPLIT_NO_EMPTY);print_r($arr); / 输出结果:输出结果:Array ( 0 = one 1 = two 2 = three )10.4PCRE兼容正则表达式函数3.preg_split()函数(3)指定返回值形式第4个参数设置为PREG_SPLIT_NO_EMPTY时,返回分割后非空的部分。第4个参数设置为PREG_SPLIT_DELIM_CAPTURE,用于返回子表达式的内容第4个参数设置为PREG_SPLIT_OFFSET_CAPTURE时,可以返回分割后内容在原字符串中的位置偏移量。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号