传智播客php培训(正则表达式).ppt_第1页
传智播客php培训(正则表达式).ppt_第2页
传智播客php培训(正则表达式).ppt_第3页
传智播客php培训(正则表达式).ppt_第4页
传智播客php培训(正则表达式).ppt_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

php正则表达式,讲师:韩顺平hanshunping,主讲韩顺平,php进阶-内容介绍,(一)基础知识(二)perl兼容正则表达式(三)posix扩展正则表达式,主讲韩顺平,php进阶-期望目标,1.熟练的使用正则表达式,主讲韩顺平,为什么要学习正则表达式提出问题,给你一个字符串(或一篇文章),请你找出所有四个数字连在一起的子串?,给你一个字符串(或一篇文章),请你找出所有四个数字连在一起的子串,并且这四个数字要满足:第一位与第四位相同,第二位与第三位相同,比如1221,5775,.,提出几个问题?,主讲韩顺平,为什么要学习正则表达式提出问题,提出几个问题?,给你一个字符串,请在服务器端验证该字符串是否是一个电子邮件?给你一个字符串,请在服务器端验证该字符串是否是一个身份证?给你一个字符串,请在服务器端验证该字符串是否是一个电话号码?,主讲韩顺平,为什么要学习正则表达式解决之道,为了解决上述问题(当然类似问题还有很多),php的设计者给我们提供了正则表达式技术,专门用于处理类似问题。,解决之道-正则表达式,主讲韩顺平,初识正则表达式基本概念,在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。,正则表达式,javascript,java,php,.,我这里要特别强调,正则表达式不是php的专利产品,实际上很多程序设计语言都支持正则表达式进行字符串操作!如右图所示。,基本概念,主讲韩顺平,初识正则表达式基本概念,php中有两套正则表达式函数库,两者功能相似,就是执行效率上有所区别:一套是由PCRE(PerlCompatibleRegularExpression)库提供的,使用pcre_为前缀的函数。(2)一套是由POSIX(PortableOperationSystemInterface)扩展提供的,使用ereg_为前缀的函数(3)两套函数库的功能相似,执行效率稍有不同。一般而言,实现相同的功能,使用PCRE库的效率略占优势,基本概念,可以查看文档来具体说明一下。,主讲韩顺平,初识正则表达式基本概念,一个正则表达式,就是用某种模式去匹配一类字符串的一个公式。很多人因为它们看上去比较古怪而且复杂所以不敢去使用,不过,经过一点点练习之后,就觉得这些复杂的表达式其实写起来还是相当简单的,而且,一旦你弄懂它们,你就能把数小时辛苦而且易错的文本处理工作缩短在几分钟(甚至几秒钟)内完成。,基本概念,主讲韩顺平,一个正则表达式实例,为让大家对正则表达式有一个直观的概念,我先给大家举一个简单的实例,学习技术思路:先入门-精通,给你一个字符串(或一篇文章),请你找出所有四个数字连在一起的子串?,intpreg_match_all(string$pattern,string$subject,array&$matches),一个简单实例,参看文档,看看函数的细节,案例reg01.php,主讲韩顺平,一个正则表达式实例,上机小练习,针对前面的案例,请大家思考1.如何检索五个连续的数字2.请你找出所有四个数字连在一起的子串,并且这四个数字要满足第一位与第四位相同第二位与第三位相同,比如1221,5775,.3.指定查找某个字串,比如韩顺平,如果则提示之,案例exercise01.php,主讲韩顺平,正则表达式的作用,php中正则表达式的主要作用包括三个方面:匹配(检索),从给定字串中匹配到符合条件的子串用新的文本替换匹配的文本将给定的字串拆分成符合条件的子串,主讲韩顺平,pcre函数,pcre函数preg_filter执行一个正则表达式搜索和替换preg_grep返回匹配模式的数组条目preg_last_error返回最后一个PCRE正则执行产生的错误代码preg_match_all执行一个全局正则表达式匹配preg_match执行一个正则表达式匹配preg_quote转义正则表达式字符preg_replace_callback执行一个正则表达式搜索并且使用一个回调进行替换preg_replace执行一个正则表达式的搜索和替换preg_split通过一个正则表达式分隔字符串,参看pcre函数文档,各个函数的详细用法在后面分别举例说明,主讲韩顺平,POSIXRegex函数,ereg_replace正则表达式替换ereg正则表达式匹配eregi_replace不区分大小写的正则表达式替换eregi不区分大小写的正则表达式匹配split用正则表达式将字符串分割到数组中spliti用正则表达式不区分大小写将字符串分割到数组中sql_regcase产生用于不区分大小的匹配的正则表达式,posix和pcre函数对照表,在php5.3.0,POSIX正则表达式扩展被废弃,在使用posix正则表达式函数时总会得到E_DEPRECATEDnotice因此,我们重点讲解pcre正则表达式技术,主讲韩顺平,正则表达式的语法规则,正则表达式主要包含三个部分:原子(普通字符,比如英文字符、数字、_等)元字符(有特殊功能的字符)模式修正字符,一个正则表达式至少包含一个原子,主讲韩顺平,正则表达式的语法-子模式、捕获、反向引用,如果你认为正则表达式只能检索固定的字符串或是连续的几个数字,那您就太小看正则表达式了,请看下面一个问题:,给你一个字符串(或一篇文章),请你找出所有四个数字连在一起的子串,并且这四个数字要满足第一位与第四位相同第二位与第三位相同,比如1221,5775,.,请你在服务器端验证字符串是否是一个电子邮件?请你在服务器端验证字符串是否是一个身份证?请你在服务器端验证字符串是否是一个电话号码?,子模式、捕获、反向引用,主讲韩顺平,正则表达式的语法-子模式、捕获、反向引用,子模式、捕获、反向引用,要解决前面的问题,我们需要了解正则表达式的几个概念:子模式我们可以用圆括号组成一个比较复杂的匹配模式,那么一个圆括号的部分我们可以看作是一个子模式。捕获多个子模式所匹配到的内容按顺序出现在内存的缓冲区中,这个我们称为捕获反向引用圆括号的内容被捕获后,可以在这个括号后被使用,从而写出一个比较实用的匹配模式,这个我们称为反向引用,主讲韩顺平,正则表达式的语法-子模式、捕获、反向引用,看几个小案例要匹配两个连续的数字:/(d)1/要匹配五个连续的数字:/(d)14/要匹配个位与千位相同,十位与百位相同的数5225,1551,可以这样写:/(d)(d)21/,案例reg.php,请思考下面的问题:请在字符串中检索商品编号,形式如:12321-333999111这样的号码,要求满足前面是一个五位数,然后一个-号,然后是一个九位数,连续的每三位要相同,子表达式、捕获、反向引用,主讲韩顺平,正则表达式的语法-原子(Atom),原子是组成正则表达式的基本单位,在分析正则表达式时,应作为一个整体。原子字符是由所有末显式指定为元字符的打印和非打印字符组成。这包括所有的英文字母、数字、标点符号以及其他一些符号。原子也包括以下内容。单个字符、数字,如az,AZ,09.模式单元,如(ABC).可以理解为由多个原子组成的大的原子。原子表,如ABC.普通转义字符。转义元字符。,主讲韩顺平,正则表达式的语法-原子(Atom),原子说明-d匹配一个数字;等价于0-9D匹配除数字以外任何一个字符;等价于0-9w匹配一个英文字母、数字或下划线;等价于0-9a-zA-Z_W匹配除英文字母、数字和下划线以外任何一个字符;等价于0-9a-zA-Z_s匹配一个空白字符;等价于fnrtvS匹配除空白字符以外任何一个字符;等价于fnrtvf匹配一个换页符等价于x0c或cLn匹配一个换行符;等价于x0a或cJr匹配一个回车符等价于x0d或cMt匹配一个制表符;等价于x09或clv匹配一个垂直制表符;等价于x0b或ckoNN匹配一个八进制数字xNN匹配一个十六进制数字cC匹配一个控制字符,正则表达式所使用的普通转义字符,主讲韩顺平,正则表达式的语法-元字符详解,如果要想灵活的运用正则表达式,必须了解其中各种元字符的功能,元字符从功能上大致分为:,限定符选择匹配符分组组合和反向引用符特殊字符?字符匹配符?定位符,元字符,主讲韩顺平,正则表达式的语法-元字符详解,用于指定其前面的字符和组合项连续出现多少次,n说明:n表示出现的次数,比如a3,14,(d)2但是这里要注意一点,13去匹配1111111的话,会得到什么结果呢?111111,案例reg07.php,元字符-限定符,主讲韩顺平,正则表达式的语法-元字符详解,n,m说明:n表示至少出现的n次最多m次,比如a3,4,14,5,(d)2,5我们看看13,4去匹配1111111的话,会得到什么结果呢?1111111正则表达式在默认匹配中使用的是贪婪匹配的原则,即尽可能匹配多的字符串,这点在上面的案例中体现的很清楚,案例reg07.php,元字符-限定符,主讲韩顺平,正则表达式的语法-元字符详解,+说明:+表示出现1次到任意多次,比如/a+/,/1+/,/(d)+/我们看看/1+/去匹配1111111的话,会得到什么结果呢?,案例reg07.htm,元字符-限定符,主讲韩顺平,正则表达式的语法-元字符详解,*说明:*表示出现0次到任意多次,比如/a*/,/1*/,/(d)*/我们看看/a1*/去匹配a111的话,会得到什么结果呢?,案例reg07.php,元字符-限定符,主讲韩顺平,正则表达式的语法-元字符详解,?说明:?表示出现0次到1次,比如/a?/,/1?/,/(d)?/我们看看/a1?/去匹配a2111的话,会得到什么结果呢?,案例reg07.php,元字符-限定符,主讲韩顺平,正则表达式的语法-元字符详解,a-z说明:a-z表示可以匹配a-z中任意一个字符,比如/a-z/,/a-z2/我们看看/A-Z/去匹配a11c8会得到什么结果?,案例reg08.php,元字符-字符匹配符,主讲韩顺平,正则表达式的语法-元字符详解,A-Z表示可以匹配A-Z中任意一个字符。0-9表示可以匹配0-9中任意一个字符。这个就不举例说明了.,元字符-字符匹配符,主讲韩顺平,正则表达式的语法-元字符详解,a-z说明:a-z表示可以匹配不是a-z中的任意一个字符,比如/a-z/,/a-z2/我们看看/a-z/去匹配a11c8会得到什么结果?用/a-z2/又会得到什么结果呢?,案例reg08.php,元字符-字符匹配符,主讲韩顺平,正则表达式的语法-元字符详解,A-Z表示可以匹配不是A-Z中的任意一个字符。0-9表示可以匹配不是0-9中的任意一个字符。这个就不举例说明了.,元字符-字符匹配符,主讲韩顺平,正则表达式的语法-元字符详解,abcd表示可以匹配abcd中的任意一个字符。abcd表示可以匹配不是abcd中的任意一个字符。当然上面的abcd你可以根据实际情况修改,以适应你的需求。,案例reg08.php,元字符-字符匹配符,主讲韩顺平,正则表达式的语法-元字符详解,d表示可以匹配0-9的任意一个数字,相当于0-9。D表示可以匹配不是0-9中的任意一个数字,相当于0-9w匹配任意英文字符、数字和下划线,相当于a-zA-Z0-9_W相当于a-zA-Z0-9_是w刚好相反.s匹配任何空白字符(空格,制表符等)S匹配任何非空白字符,和s刚好相反.匹配出n之外的所有字符,如果要匹配.本身则需要使用.,思考题:请编写一个正则表达式,可以匹配任意三个连续的字符,案例reg08.php,/(dD)12/,元字符-字符匹配符(即atom原子),主讲韩顺平,正则表达式的语法-元字符详解,元字符-特殊字符匹配,主讲韩顺平,正则表达式的语法-元字符详解,定位符用于规定要匹配的字符串出现的位置,比如在字符串的开始还是在结束的位置,这个也是相当有用的,必须掌握。,符号说明:匹配目标字符串的开始位置。比如/han/去匹配“hanshunpinghanhan”,我们看看会得到什么结果?$符号说明:匹配目标字符串的结束位置。比如/han$/去匹配“hanshunpinghanhanuu”,我们看看会得到什么结果?,案例reg10.php,元字符-定位符,主讲韩顺平,正则表达式的语法-元字符详解,b符号说明:匹配目标字符串的边界。这个字符串的边界,有点不好理解,我给大家举一个实例说明,比如/hanb/去匹配“hanshunpingsphannnhan”,我们会匹配到“hanshunpingsphannnhan”,所以这里说的字符串的边界指的是子串间有空格,或者是目标字符串的结束位置,特别注意没有目标字符串的开始位置B符号说明:匹配目标字符串的非边界。这个和b的含义刚刚相反,不再赘述,请看一个案例比如/hanB/去匹配“hanshunpingsphannnhan”,我们会匹配到“hanshunpingsphannnhan”,案例reg10.php,元字符-定位符,主讲韩顺平,正则表达式的语法-元字符详解,符号说明:在我们使用正则表达式去检索某些特殊字符的时候,需要用到转义符号,否则检索不到结果,甚至会报错的。案例:用/$/去匹配“abc$(”会怎样?用/(/去匹配“abc$(”会怎样?,案例reg11.php,元字符-转义符号,主讲韩顺平,正则表达式的语法-元字符详解,需要用到转义符号的字符有以下:.*+()$/?,案例reg11.php,元字符-转义符号,主讲韩顺平,正则表达式的语法-元字符详解,有时候,我们在匹配某个字符串的时候是选择性的,即:既可以匹配这个,又可以匹配那个,这时你需要用到选择匹配符号|,案例reg12.php,选择匹配符号还是比较好理解的,我们通过一个案例说明:用(han|韩|含)去匹配“hanshunping韩顺平”,会得到什么结果?,元字符-选择匹配符,主讲韩顺平,正则表达式的语法-模式修正符(patternmodifiers),模式修正符扩展了正则表达式在字符匹配、替换操作时的某些功能。这些扩展或者说修正增强了正则表达式的处理能力。模式修正符一般标记于整个模式之外,并且可以组合使用,如“/apple/i”、“/cat|dog/uis”等。表列出了一些常用的模式修正符极其功能说明。模式修正符说明i可同时匹配大小写字母M将字符串视为多行s将字符串视为单行,换行符做为普通字符看待x模式中的空白忽略不计S当一个模式将被使用若干次时,为加速匹配起见值得先对其进行分析U匹配到最近的字符串e将替换的字符串作为表达使用,主讲韩顺平,正则表达式的语法-模式修正符(patternmodifiers),下面是几个简单的示例,可以说明模式修正符的使用/apple/i匹配“apple”或“Apple”等

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论