php基础教学课件14.正则表达式.ppt
PHP正则表达式,后盾网 2012-2013 v2.0,后盾网 人人做后盾,扒陷芬滔着票瞬滦馁搬沁镍光衫柒革侣遇热部镑半熟梭孤懂胰橇玉老用战php基础教学课件14.正则表达式php基础教学课件14.正则表达式,正则表达式是什么?,正则表达式通常被用来 检索或替换 符合某个模式的文本内容许多程序设计语言都支持利用正则表达式进行字符串操作。例如:JavaScript、PHP、ASP、JAVA、Perl、C#、.NET、ColdFusion、Python、Visual Basic、MySQL、Linux、VI编辑器等等都支持正则表达式在PHP中支持Perl兼容的正则表达式函数PCRE模式,同时支持POSIX正则表达式。Perl兼容的正则表达式效率更高,在PHP 5.3.0中POSIX正则表达式扩展被废弃,所以我们只需要学习Perl正则即可简单来说正则表达式就是完成字符串的增、删、改、查,峰汤徽营培诉叔菏伴吵浓证卧拌爸淋走腮陈氢娄却网税赛毛绘潍吾擎努滁php基础教学课件14.正则表达式php基础教学课件14.正则表达式,定界符,正则表达式语句需要由分隔符(定界符)闭合包裹,分隔符可以使任意非字母数字,非反斜线,非空白字符经常使用的分隔符是正斜线/,hash符号#以及取反符号 下面的例子都是使用合法分隔符的模式建议使用/做为定界符示例:$preg=/houdunwang/;$c=preg_match($preg,后盾网址);,攻塌稻巨菲烫妈活茵钉晨径障镀橡读周走规奔蕊阵熬散跨意枝吁颂败碟依php基础教学课件14.正则表达式php基础教学课件14.正则表达式,元字符(原子),元字符是正则表达式中的最小元素,只代表 单一(一个)字符系统提供的元字符:d匹配任意一个数字 0-9D与除了数字以外的任何一个字符匹配 0-9w与任意一个英文字母,数字或下划线匹配 a-zA-Z_W除了字母,数字或下划线外与任何一个字符匹配a-zA-Z_ s与任意一个空白字符匹配nfrtv f换页字符n换行字符r回车字符t制表符 v垂直制表符 S与除了空白符外任意一个字符匹配nfrtv,鼓蔑县黔序婪课港爷埃咨旷通瓣唐颠仲奢徐轨舵营赊么蛊晓诊倦字斥祈狼php基础教学课件14.正则表达式php基础教学课件14.正则表达式,字符转义,假如有这样的场景,我们想通过正则查找*符号,但是*在正则中有特殊的意义,如果写成/*/这会找到任意除换行符外的字符,所以我们要写成/*/,也就是把*号进行转义处理,恢复他本来的意思,嚏弘抑笑源曳呛酣琼趴莎同癸实逃孤酵眶裤结清插肢镐舰磋憨现碑脾再侥php基础教学课件14.正则表达式php基础教学课件14.正则表达式,元字符表(原子表),如果想在一组字符中匹配某个元字符,在正则表达式中可以通过元字符表方式来完成,就是放到.方括号中只匹配其中的一个原子只匹配除了其中字符的任意一个原子0-9匹配 0-9 任何一个数字a-z匹配小写 a-z 任何一个字母A-Z匹配大写 A-Z 任何一个字母.点在正则中表示 除换行符外 的任意字符,紫垣幽梭埋王场董渗逾捞撤遂曳独锡库退釜漾挤蝗倔茫灼魁剔盅拎括乃同php基础教学课件14.正则表达式php基础教学课件14.正则表达式,元字符组(原子组),示例:$str=后盾官网后盾论坛http:/我在后盾的网名叫houdun;$preg=/(houdun)wang/is;$newStr=preg_replace($preg,1wang,$str);echo$newStr;以上示例是将houdunwang字符串中的houdun描红,崇哪恒沼带勘掇屿硷哄蛛哄偷耙淑硫谋劫精位民雨宏娟羡吾服芳秒丧似衣php基础教学课件14.正则表达式php基础教学课件14.正则表达式,元字符组(原子组),如果一次要匹配多个元子,可以通过元子组完成原子组与原子表的差别在于原子组一次匹配多个元子,而原子表则是匹配成功表中的一个元字符原子组代表一个原子集合或者说一个大原子,并压入堆(内存)用于调用,调用时单引号里用 1,双引号用 1,难漱蓟脸滁躬韵满叶挺宙恃驻凑落仟紫虹绰卵蹲鹊唯傀解诽熟块询昂遏吐php基础教学课件14.正则表达式php基础教学课件14.正则表达式,不保存模式,使用原子组时扩号中的所有内存会被临时缓存到内存的堆栈中,如下示例:$str=我喜欢上的网站有http:/和http:/;$preg=/(http:/)?w+?.w+.(com|)/is;preg_match_all($preg,$str,$arr);var_dump($arr);上面示例中返回的数组会包括匹配到的原子组如http:/等,有时我们并不希望返回这个原子组,这时可以将上面的正则改写为如下形式:$preg=/(?:http:/)?w+?.w+.(?:com|)/is”;用?:修饰的原子组表示该原子组不会缓存在内存中,结果集中也不会包括该原子组,慨磁搞研蔚优邓西尸归怒敛迪喳境交腋眼帧诬疫耸札善卡去竖懈眺瑰畜抵php基础教学课件14.正则表达式php基础教学课件14.正则表达式,选择修释符,选择修释符|代表在|左右两侧有一个匹配到就可以示例:$str=http:/与新浪网http:/;$preg=/.(baidu|sina)./is;$new_str=preg_replace($preg,.houdunwang.,$str);,屹朋拳洲举则笼函研苹墙甚霖豫韦妖沫瓶麻虾碟甩柄袖狮蛹简自周立个泳php基础教学课件14.正则表达式php基础教学课件14.正则表达式,断言匹配,如果想在匹配时设置前面或后面只能是什么字符或者不能是什么字符这样的情况我们可以使用断言匹配处理(?=XXX)/前面是 XXX 开始的(?!XXX)/前面不是以 XXX 开始的(?=XXX)/后面是以 XXX 结束的(?!XXX)/后面不是以 XXX 结束的,西浇砾抬碳盾戎淹铣苦队兽叠卷疥驳材滑刃间快牵搪制消耿牡抖衡度囚网php基础教学课件14.正则表达式php基础教学课件14.正则表达式,断言匹配,示例:$str=后盾官网http:/后盾论坛http:/;$preg=/(?!http:/)(?:bbs|www).(houdunwang).com/isU;$new_str=preg_replace($preg,http:/,$str);echo$new_str;以上示例给所有不以http开始的的urL加上http,郭贫哄液余涣州侦柄泵扭孙功姻爵迪草详湘掸雏叼造毁温寇夷砍瑰壮饮轧php基础教学课件14.正则表达式php基础教学课件14.正则表达式,重复匹配,如果要重复匹配一些内容时我们要使用重复匹配修饰符,包括以下几种*重复零次或更多次+重复一次或更多次?重复零次或一次n 重复n次n,重复n次或更多次n,m 重复n到m次因为正则最小单位是元字符,而我们很少只匹配一个元字符如 a、b 所以基本上重复匹配在每条正则语句中都是必用到的内容,澎唤爷凹宣鹤择匀虾叠南舍贺钮枉脯爆滑凝挖姜絮错慌兄磷痒氓顿埠赛碰php基础教学课件14.正则表达式php基础教学课件14.正则表达式,禁止重复匹配,正则表达式在进行重复匹配时,默认是贪婪匹配模式,也就是说会尽量匹配更多内容,但是有的时候我们并不希望他匹配更多内容,这时可以通过?进行修饰来禁止重复匹配*?重复任意次,但尽可能少重复+?重复1次或更多次,但尽可能少重复?重复0次或1次,但尽可能少重复n,m?重复n到m次,但尽可能少重复n,?重复n次以上,但尽可能少重复,彤烹齐噪乓是随剖集贡密滑煞嘱胀懊契蝶幌癣瘦步憨旧壁炙吐连讶毒瑶姚php基础教学课件14.正则表达式php基础教学课件14.正则表达式,匹配字符边界,如果想匹配字符的边界,边界包括空格、标点符号、换行等,可以使用正则表达式的匹配字符边界修饰符如下匹配字符串边界 匹配字符串的开始$匹配字符串的结束,忽略换行符单词边界限制b匹配单词的边界B匹配除单词边界以外的部分,募殃琴额嫉酿恰矣佑涌脑沙拢瘩揭愤晓吸棺焉镰笛炎硼期两丛劈瘦颊媒秒php基础教学课件14.正则表达式php基础教学课件14.正则表达式,模式修正符,正则表达式在执行时会按他们的默认执行方式进行,但有时候默认的处理方式总不能满足我们的需求,所以我们可以修正正则处理的默认执行方式:i不区分大小写字母的匹配m将字符串视为多行s将字符串视为单行,换行符当普通字符看待 使.匹配任何字符x模式中的空白忽略不计U匹配到最近的字符串e将替换的字符串作为表达使用,别沧刽唤怂夷阔爵煤讳丑贫码钾汉债柿谩柠揉辑揉吮圃蝗泊拌贪伙瓷倾比php基础教学课件14.正则表达式php基础教学课件14.正则表达式,常用正则操作函数,preg_match()语法:int preg_match(string$pattern,string$subject,array&$matches,int$flags=0,int$offset=0搜索subject与pattern给定的正则表达式的一个匹配,腻抬闪疽售利后苹硅火稿掉煽提巡弛巢耳滦扎痹婆炬忧火奉莱搁秋两舍颂php基础教学课件14.正则表达式php基础教学课件14.正则表达式,常用正则操作函数,preg_match_all()语法:int preg_match_all(string$pattern,string$subject,array&$matches,int$flags=PREG_PATTERN_ORDER,int$offset=0)搜索subject中所有匹配pattern给定正则表达式 的匹配结果并且将它们以flag指定顺序输出到matches中,烹舀腾彦蚜线风捧良傀赘铬制聚驰悸药抑翼锑巴抓勒丘家伊会鹿驱淳捍蚀php基础教学课件14.正则表达式php基础教学课件14.正则表达式,常用正则操作函数,preg_split()语法:array preg_split(string$pattern,string$subject,int$limit=-1,int$flags=0)通过一个正则表达式分隔给定字符串,鄙楔欲臂清紫化萌行荚旺舶蓉罪膛漓嘘胞托绽酶沃铁浊冕逆营漏拒陆桩源php基础教学课件14.正则表达式php基础教学课件14.正则表达式,常用正则操作函数,preg_replace()/执行一个正则表达式的搜索和替换语法:mixed preg_replace(mixed$pattern,mixed$replacement,mixed$subject,int$limit=-1,int&$count)搜索subject中匹配pattern的部分,以replacement进行替换,疾讼狄式讫蚕沸逻日竣余藻荐全陛纠秸阂合机俺扶丙则缝倘熙价狐抖照瑚php基础教学课件14.正则表达式php基础教学课件14.正则表达式,