PHP入门培训教程PHP培训教程PHP基础教程16PHP正则.ppt

上传人:牧羊曲112 文档编号:6514632 上传时间:2023-11-08 格式:PPT 页数:40 大小:425.50KB
返回 下载 相关 举报
PHP入门培训教程PHP培训教程PHP基础教程16PHP正则.ppt_第1页
第1页 / 共40页
PHP入门培训教程PHP培训教程PHP基础教程16PHP正则.ppt_第2页
第2页 / 共40页
PHP入门培训教程PHP培训教程PHP基础教程16PHP正则.ppt_第3页
第3页 / 共40页
PHP入门培训教程PHP培训教程PHP基础教程16PHP正则.ppt_第4页
第4页 / 共40页
PHP入门培训教程PHP培训教程PHP基础教程16PHP正则.ppt_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《PHP入门培训教程PHP培训教程PHP基础教程16PHP正则.ppt》由会员分享,可在线阅读,更多相关《PHP入门培训教程PHP培训教程PHP基础教程16PHP正则.ppt(40页珍藏版)》请在三一办公上搜索。

1、回顾,字符串的定义都有哪三种方式,简单区别?常用的字符串的输出函数都有哪些?常用的字符串的比较函数都有哪些?常用的字符串的格式化函数都有哪些?,预习检查,使用正则表达式可以实现字符串的哪些操作?正则表达式中的元字符都有哪些?与Perl兼容的正则表达式都有哪些操作函数?,本章任务,1.正则表达式简介2.正则表达式的语法规则3.与Perl兼容的正则表达式函数,1.正则表达式介绍,正则表达式简介:正则表达式是用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。到目前为止,我们前面所用过的精确(文本)匹配也是一种正则表达式。在PHP中,正则表达式一般是由正规字符

2、和一些特殊字符(类似于通配符)联合构成的一个文本模式的程序性描述。PHP中,正则表达式有三个作用:匹配,也常常用于从字符串中析取信息。用新文本代替匹配文本。将一个字符串拆分为一组更小的信息块。一个正则表达式中至少包含一个原子。,在PHP中有两套正则表达式函数库,两者功能相似,只是执行效率略有差异:一套是由PCRE(Perl Compatible Regular Expression)库提供的。使用“preg_”为前缀命名的函数;一套由POSIX(Portable Operating System Interface of Unix)扩展提供的。使用以“ereg_”为前缀命名的函数;PCRE来源

3、于Perl语言,而Perl是对字符串操作功能最强大的语言之一,PHP的最初版本就是由Perl开发的产品。PCRE语法支持更多特性,比POSIX语法更强大。举例:想一想这两个正则表达式做什么用?/-?d+$|-?0 xXda-fA-F+$/0-9a-zA-Z_-+0-9a-zA-Z_-+(.0-9a-zA-Z_-+)0,3$/,与Perl语言兼容的正则表达式处理函数,2.正则表达式的语法规则,2.1 定界符2.2 原子2.3 元字符2.4 模式修正符,Perl兼容正则表达式,正则表达式作为一个匹配的模版,是由原子(普通字符,例如字符a到z)、特殊字符(元字符,例如*、+和?等)、以及模式修正符三

4、部分组成的文字模式。一个最简单正则表达式至少包含一个原子。将下面的正则表达式拆分如下:/(.+?)/sim定界符:两个斜线”/”。原子用到了等普通字符和t r n等转义字符元字符使用了()|.?*+等具有特殊含义的字符用到了模式修正符是在定界符最后一个斜线之后的三个字符:s i m,2.1 定界符,在程序语言中,使用与Perl兼容的正则表达式,通常都需要将模式表达式放入定界符之间,如“/”。作为定界符常使用反斜线“/”,如“/apple/”。用户只要把需要匹配的模式内容放入定界符之间即可。作为定界的字符也不仅仅局限于“/”。除了字母、数字和斜线“”以外的任何字符都可以作为定界符,像#、|、!等

5、都可以的。/-使用反斜线作为定界符合法|(d3)-d+|Sm-使用竖线”|”作为定界符合法!(?i)php34!-使用竖线”!”作为定界符合法s+(s+)?$-使用竖线”作为定界符合法/href=(.*)-非法定界符,缺少结束定界符1-d3-d3-d4|-非法定界符,缺少其实定界符,2.2 原子,原子是正则表达式的最基本的组成单元,而且在每个模式中最少要少包含一个原子。原子是由所有那些未显示指定为元字符的打印和非打印字符组成,具体分为5类。1.普通字符作为原子:如 az、AZ、09 等2.一些特殊字符和转义后元字符作为原子:所有标点符号,但语句特殊意义的符号需要转义后才可作为原子,如:”*+?

6、.等3.一些非打印字符作为原子:如:f n r t v cx4.使用“通用字符类型”作为原子:如:d D w W s S。5.自定义原子表()作为原子:如:/apjsp/apjsp/,正则表达式中常用的非打印字符,正则表达式中常用的“通用字符类型”,2.3 元字符,字符串边界限制,在某些情况下,需要对匹配范围进行限定,以获得更准确的匹配结果。“”和“$”分别指定字符串的开始和结束。例如,在字符串“Tom and Jerry chased each other in the house until toms uncel come in”中元字符“”或“A”置于字符串的开始确保模式匹配出现在字符串

7、首端;/Tom/元字符“$”或“Z”置于字符串的结束,确保模式匹配出现字符串尾端。/in$/如果不加边界限制元字符,将获得更多的匹配结果。/Tom$/精确匹配/Tom/模糊匹配,单词边界限制,在使用各种编辑软件的查找功能时,可以通过选择“按单词查找”获得更准确的结果。正则表达式中也提供类似的功能。例如:在字符串“This island is a beautiful land”中元字符“b”对单词的边界进行匹配;/bisb/匹配单词“is”,不匹配“This”和“island”。/bis/匹配单词“is”和“island”中的“is”,不匹配“This”元字符“B”对除单词边界以外的部分进行匹配

8、。/BisB/将明确的指示不与单词的左、右边界匹配,只匹配单词的内部。所以在这个例子中没有结果。/Bis/匹配单词“This”中的“is”,重复匹配,正则表达式中有一些用于重复匹配某些原子的元字符:“?”、“*”、“+”。他们主要的区别是重复匹配的次数不同。元字符“?”:表示0次或1次匹配紧接在其前的原子。例如:/colou?r/匹配“colour”或“color”。元字符“*”:表示0次、1次或多次匹配紧接在其前的原子。例如:/zo*/可以匹配z、zoo元字符“+”:表示1次或多次匹配紧接在其前的原子。例如:/go+gle/匹配“gogle”、“google”或“gooogle”等中间含有多

9、个o的字符串。,任何一个字符,元字符“.”匹配除换行符外任何一个字符。相当于:n(Unix系统)或rn(windows系统)。例如:/pr.y/可以匹配的字符串“prey”、“pray”或“pr%y”等。通常可以使用“.*”组合来匹配除换行符外的任何字符。在一些书籍中也称其为“全匹配符”或“单含匹配符”。例如:/a.*z$/表示可以匹配字母“a”开头,字母“z”结束的任意不包括换行符的字符串。/.+/也可以完成类似的匹配功能所不同的是其至少匹配一个字符。/a.+z$/匹配“az”不匹配字符串“az”。,重复匹配,元字符“”准确地指定原子重复的次数,指定所匹配的原子出现的次数。“m”表示其前原子

10、恰好出现m次。“m,n”表示其前原子至少出现m次,至多出现n次。“m,”表示其前原子出现不少于m次。例如:/zo1,3m/只能匹配字符串“zom”、“zoom”、或“zooom”。/zo3m/只能匹配字符串“zooom”。/zo3,m/可以匹配以“z”开头,“m”结束,中间至少为3个“o”的字符串。/bo0,1u/可以匹配字符串“bought a butter”中的“bou”和“bu”,等价于bo?u。,原子表 方括号表达式,原子表”中存放一组原子,彼此地位平等,且仅匹配其中的一个原子。如果想匹配一个”a”或”e”使用 ae。例如:Praey 匹配”Pray”或者”Prey”。原子表”或者称为

11、排除原子表,匹配除表内原子外的任意一个字符。例如:/pu/匹配“part”中的“pa”,但无法匹配“computer”中的“pu”因为“u”在匹配中被排除。原子表“-”用于连接一组按ASCII码顺序排列的原子,简化书写。例如:/x0123456789/可以写成x0-9,用来匹配一个由“x”字母与一个数字组成的字符串。例如:/a-zA-Z/匹配所有大小写字母/a-z0-9$/匹配比如“z2”、“t6”、“g7”/0 xX0-9a-fA-F/匹配一个简单的十六进制数字,如“0 x9”。/0-9a-zA-Z_/匹配除英文字母、数字和下划线以外任何一个字符,其等价于W。/0?xX0-9a-fA-F+/

12、匹配十六进制数字,可以匹配“0 x9B3C”或者“X800”等。/可以匹配“”、“”或“”等HTML标签,并且不严格的控制大小写。,模式选择符,元字符“|”又称模式选择符。在正则表达式中匹配两个或更多的选择之一。例如:在字符串“There are many apples and pears.”中,/apple|pear/在第一次运行时匹配“apple”;再次运行时匹配“pear”。也可以继续增加选项,如:/apple|pear|banana|lemon/,模式单元,元字符“()”将其中的正则表达式变为原子(或称模式单元)使用。与数学表达式中的括号类似,“()”可以做一个单元被单独使用。例如:/

13、(Dog)+/匹配的“Dog”、“DogDog”、“DogDogDog”,因为紧接着“+”前的原子是元字符“()”括起来的字符串“Dog”。/You(very)+old/匹配“You very old”、“You very very old”/Hello(world|earth)/匹配“Hello world”、“Hello earth”一个模式单元中的表达式将被优先匹配或运算。,重新使用的模式单元,系统自动将模式单元“()”中的匹配依次存储起来,在需要时可以用“1”、“2”、“3”的形式进行引用。当正则表达式包含有相同的模式单元时,这种方法非常便于对其进行管理。注意使用时需要写成“1”、“2

14、”例如:/d2(W)d21d4$/匹配“12-31-2006”、“09/27/1996”、“86 01 4321”等字符串。但上述正则表达式不匹配“12/34-5678”的格式。这是因为模式“W”的结果“/”已经被存储。下个位置“1”引用时,其匹配模式也是字符“/”。当不需要存储匹配结果时使用非存储模式单元“(?:)”例如/(?:a|b|c)(D|E|F)1g/将匹配“aEEg”。在一些正则表达式中,使用非存储模式单元是必要的。否则,需要改变其后引用的顺序。上例还可以写成/(a|b|c)(C|E|F)2g/。,模式匹配的优先级,2.4 模式修正符,3.与Perl兼容的正则表达式函数,3.1 子

15、符串的匹配与查找函数3.2 字符串的替换函数3.3 字符串的分割与连接,3.1 子符串的匹配与查找函数,1.函数preg_match()-执行一个正则表达式匹配int preg_match(string$pattern,string$subject,array&$matches)搜索subject与pattern给定的正则表达式的一个匹配.2.函数preg_match_all()-执行全局正则表达式匹配int preg_match_all(string$pattern,string$subject,array&$matches,int$flags)搜索subject中所有匹配pattern给定

16、正则表达式 的匹配结果并且将它们以flag指定顺序输出到matches中.参数flags是指定matches的数组格式。3.函数preg_grep()-返回匹配模式的数组条目array preg_grep(string$pattern,array$input,int$flags=0)返回给定数组input中与模式pattern 匹配的元素组成的数组。4.其它子串处理函数:strstr()、strpos()、strrpos()、substr(),;/数组中第一个元素保存全部匹配结果 echo URL中的协议为:.$matches1.;/数组中第二个元素保存第一个子表达式 echo URL中的主机

17、为:.$matches2.;/数组中第三个元素保存第二个子表达式 echo URL中的域名为:.$matches3.;/数组中第四个元素保存第三个子表达式 echo URL中的顶域为:.$matches4.;/数组中第五个元素保存第四个子表达式 echo URL中的文件为:.$matches5.;/数组中第六个元素保存第五个子表达式 else echo 搜索失败!;/如果和正则表达式没有匹配成功则输出?,;echo 第.$i.个URL中的协议为:.$urls1.;echo 第.$i.个URL中的主机为:.$urls2.;echo 第.$i.个URL中的域名为:.$urls3.;echo 第.$

18、i.个URL中的顶域为:.$urls4.;echo 第.$i.个URL中的文件为:.$urls5.;$i+;/计数器累加 else echo 搜索失败!;,Apache2.2.9 2=MySQL5.0.51 3=PHP5.2.6)?,?php/*用于获取URL中的文件名部分 param string$url 任何一个URL格式的字符串 return string URL中的文件名称部分*/function getFileName($url)/获取URL字符串中最后一个“/”出现的位置,再加1则为文件名开始的位置$location=strrpos($url,/)+1;/获取在URL中从$loca

19、tion位置取到结尾的子字符串$fileName=substr($url,$location);/返回获取到的文件名称 return$fileName;/获取网页文件名index.php echo getFileName(http:/获取网页中图片名logo.gif echo getFileName(http:/获取本地中的文件名php.ini echo getFileName(file:/C:/WINDOWS/php.ini);,3.2 子串替换函数,1.preg_replace 执行一个正则表达式的搜索和替换mixed preg_replace(mixed$pattern,mixed$re

20、placement,mixed$subject,int$limit=-1)搜索subject中匹配pattern的部分,以replacement进行替换.,*?/is;/声明一个带有多个HTML标记的文本$text=这个文本中有粗体和带有下画线以及斜体 还有带有颜色和字体大小的标记;/将所有HTML标记替换为空,即删除所有HTML标记 echo preg_replace($pattern,$text);/通过第四个参数传入数字2,替换前两个HTML标记 echo preg_replace($pattern,$text,2);,?php$pattern=/(d2)/(d2)/(d4)/;/日期格

21、式的正则表达式$text=今年国庆节放假日期为10/01/2012到10/07/2012共7天。;/带有两个日期格式的字串 echo preg_replace($pattern,3-1-2,$text);/将日期替换为以“-”分隔的格式 echo preg_replace($pattern,$3-$1-$2,$text);/将“1”改为“$1”的形式,*)/e;/声明一个带有多个HTML标记的文本$text=这个文本中有粗体和带有下画线以及斜体还 有带有颜色和字体大小的标记;/将所有HTML的小写标记替换为大写 echo preg_replace($pattern,1.strtoupper(2

22、).3,$text);,2.str_replace 子字符串替换mixed str_replace(mixed$search,mixed$replace,mixed$subject,int&$count)该函数返回一个字符串或者数组。该字符串或数组是将 subject 中全部的 search 都被 replace 替换之后的结果。通过$count参数指定来获取替换的次数。,LAMP为B/S架构软件开发的黄金组合;LAMP每个成员都是开源软件;lampBrother是LAMP的技术社区。;/区分大小写的将“LAMP”替换为“Linux+Apache+MySQL+PHP”,并统计替换次数 echo

23、 str_replace(LAMP,Linux+Apache+MySQL+PHP,$str,$count);echo 区分大小写时共替换.$count.次;/替换4次/不区分大小写的将“LAMP”替换为“Linux+Apache+MySQL+PHP”,并统计替换次数 echo str_ireplace(LAMP,Linux+Apache+MySQL+PHP,$str,$count);echo 不区分大小写时共替换.$count.次;/替换5次,?php/元音字符数组$vowels=array(a,e,i,o,u,A,E,I,O,U);/将第三个参数中的字符串,搜索到的数组中的元素值都被替换为空

24、,区分大写小替换 echo str_replace($vowels,Hello World of PHP);/输出:Hll Wrld f PHP/元音字符数组$vowels=array(a,e,i,o,u);/将第三个参数中的字符串,搜索到的数组中的元素值都被替换为空,不区分大写小替换 echo str_ireplace($vowels,HELLO WORLD OF PHP);/输出:HLL WRLD F PHP,?php$search=array(http,www,jsp,com);/搜索目标数组$replace=array(ftp,bbs,php,net);/替换数组$url=http:/

25、被替换的字符串 echo str_replace($search,$replace,$url);/输出替换后的结果:ftp:/,3.3 字符串的分割和连接,preg_split 通过一个正则表达式分隔字符串array preg_split(string$pattern,string$subject,int$limit=-1,int$flags=0)通过一个正则表达式$pattern分隔给定字符串$subject。其中$limit是最大替换个数。flags可以是任何下面标记的组合PREG_SPLIT_NO_EMPTY:返回分隔后的非空部分PREG_SPLIT_DELIM_CAPTURE:用于分隔

26、的模式中的括号表达式将被捕获并返回.PREG_SPLIT_OFFSET_CAPTURE:返回附加字符串偏移量,hypertext 1=language 2=programming)/将字符串分割成字符$chars=preg_split(/,lamp,-1,PREG_SPLIT_NO_EMPTY);print_r($chars);/分割后输出Array(0=l 1=a 2=m 3=p)/将字符串分割为匹配项及其偏移量$chars=preg_split(/,hypertext language programming,-1,PREG_SPLIT_OFFSET_CAPTURE);print_r($c

27、hars);/*分割后输出:Array(0=Array(0=hypertext 1=0)1=Array(0=language 1=10)2=Array(0=programming 1=19)*/,explode-使用一个字符串分割另一个字符串array explode(string$separator,string$string,int$limit)此函数返回由字符串组成的数组,每个元素都是 string 的一个子串,它们被字符串 separator 作为边界点分割出来。其中$limit是指定对大分割个数。implode-使用一个子串组装一个数组。string implode(string$g

28、lue,array$pieces)将pieces数组中的每个值,使用glue作为分隔符组装成一个子串并返回。,Linux 1=Apache+MySQL+PHP)/使用负数限制子串,则返回除了最后的限制个元素外的所有元素 print_r(explode(+,$lamp,-1);/输出Array(0=Linux 1=Apache 2=MySQL),?php$lamp=array(Linux,Apache,MySQL,PHP);echo implode(+,$lamp);/使用加号连接后输出Linux+Apache+MySQL+PHP echo join(+,$lamp);/使用三个加号连接后输出Linux+Apache+MySQL+PHP,总 结,本章必须掌握的知识点:正则表达式的语法规则正则表达式中的原子正则表达式中的元字符正则表达式中的模式修正符号与Perl兼容的正则表达式操作函数,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号