《PHP程序设计基础第6章-字符串函数.pptx》由会员分享,可在线阅读,更多相关《PHP程序设计基础第6章-字符串函数.pptx(53页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、字符串函数第六章目录01 字符串的定义方法02 字符串处理函数03 什么是正则表达式05 正则表达式语法04 正则表达式的组成06 PCRE兼容正则表达式函数01 字符串的定义方法 使用单引号或双引号定义字符串 使用定界符定义字符串 010201 字符串的定义方法定义字符串在字符串中使用变量01 字符串的定义方法使用定界符定义字符串?php$str=“再过一天;echo strmark$str 就是周末了!strmark;?string(2)ba 1=string(1)a 2=string(1)a var_dump(explode(n,banana);/输出结果:array(2)0=strin
2、g(2)ba 1=string(3)ana var_dump(explode(n,banana,2);/输出结果:array(1)0=string(2)ba var_dump(explode(n,banana,-2);/输出结果:array(1)0=string(6)banana var_dump(explode(n,banana,0);/输出结果:array(1)0=string(6)itcast var_dump(explode(p,itcast);/输出结果:bool(false)var_dump(explode(,itcast);02 字符串处理函数(6)implode()函数impl
3、ode()函数用于指定的连接符将数组拼接成一个字符串。03 什么是正则表达式正则表达式是一种描述字符串结构的语法规则,是一种特定的格式化模式,用于验证各种字符串是否匹配(Match)这个特征,进而实现高级的文本查找、替换、截取等操作。正则表达式在发展过程中出现了多种形式,一种是POSIX规范兼容的表达式,另一种是当Perl(一种功能丰富的编程语言)发展起来后,衍生出来的PCRE(Perl兼容正则表达式)库,使得许多开发人员将PCRE整合到自己的语言中,PHP中也未PCRE库的使用提供了相应的函数。03 什么是正则表达式邮件的格式:其中tenssun是用户名,是服务器名用户名只能由英文字母az(
4、不区分大小写)、数字09、下划线组成。用户名的起始字符必须是英文字母.如:netease_2005 用户名长度为520个字符。服务器名只能由英文字母az(不区分大小写)、数字09、下划线及点组成,后点前面长度限制为1-10个字符,点后面的限制为com,cn,net。03 什么是正则表达式先写用户名的正则表达式a-zA-Z0-9a-zA-Z_4,19再写主机名的正则表达式0-9a-zA-Z_1,10(.)(com|cn|net)$再把前后拼起来则为:a-zA-Z0-9a-zA-Z_4,190-9a-zA-Z_1,10(.)(com|cn|net)$03 什么是正则表达式04 正则表达式的组成在P
5、HP中,一个完整的正则表达式是由4部分内容组成的,分别为定界符、元字符、文本字符和模式修饰符。其中,定界符一般为“/”,并且定界符可以自己设置,只要保持前后一致即可;元字符是具有特定含义的字符;文本字符就是普通的文本,如字母和数字等。模式修饰符用于指定正则表达式以何种形式进行匹配,如i表示忽略大小写,x表示忽略空白字符等。注意:在编写正则表达式时,元字符和文本字符在定界符内,模式修饰符标记在结尾定界符之外。05 正则表达式语法一、定位符和选择符1.定位符在程序开发中,经常需要确定字符在字符串中的具体位置。例如,匹配字符串的头部或尾部。和$他们是分别用来匹配字符串的开始和结束。05 正则表达式语
6、法下面法举例说明The:开头一定要有The字符串;of despair$:结尾一定要有of despair 的字符串;那么,abc$:就是要求以abc开头和以abc结尾的字符串,实际上是只有abc匹配 notice:匹配包含notice的字符串 你可以看见如果你没有用我们提到的两个字符(最后一个例子),就是说 模式(正则表达式)可以出现在被检验字符串的任何地方,你没有把他锁定到两边(开始或结束)05 正则表达式语法例:$subject=“Its a nice day today”;/匹配字符串开始的位置preg_match(/It/,$subject,$matches);print_r($ma
7、tches);/匹配字符串结束的位置preg_match(/today$/,$subject,$matches);print_r($matches);05 正则表达式语法2.选择符若要查找的条件有多个,只要其中一个满足即可成立时,可以使用选择符“|”。该字符可以理解为“或”。具体示例如下:hihello:匹配含有hi 或者 hello 的 字符串;(bcd)ef:匹配含有 bef 或者 cdef的字符串;(ab)*c:匹配含有这样多个(包括0个)a或b,后面跟一个c 的字符串;05 正则表达式语法例:05 正则表达式语法二、字符范围与反斜线1.字符范围在正则表达式中,对于匹配某个范围内的字符,
8、可以用中括号“”和连字符“-”来实现。且在中括号中还可以用反义字符“”,表示匹配不在指定字符范围内的字符。05 正则表达式语法示例示例说明明匹配匹配结果果abc匹配字符a、b、cabc匹配除a、b、c以外的字符A-Z匹配字母A-Z范围内的字符a-z匹配字母a-z范围外的字符a-zA-Z0-9匹配大写字母、小写字母和数字0-9范围内的字符注意:字符“-”在通常情况下只表示一个普通字符,只有在表示字符范围时才作为元字符来使用。“-”连字符表示的范围遵循字符编码的顺序,如“a-Z”“z-a”“a-9”都是不合法的范围。05 正则表达式语法1.反斜线在正则表达式中,“”除了可作为转义字符外,还具有其他
9、功能。字符字符说明明d任意一个十进制数字,相当于0-9D任意一个非十进制数字w任意一个单词字符,相当于a-zA-Z0-9W任意一个非单词字符s任意一个空白字符(如空格、水平制表符等)S任意一个非空白字符b单词分界符,如“bgra”可以匹配”best grade”的结果为”gra”B非单词分界符。如“Bade”可以匹配”best grade”的结果为”ade”xhh表示hh(十六进制2位数字)对应的ASCII字符,如“x6”表示“a”05 正则表达式语法三、字符的限定和分组1.点字符和限定符点字符“.”用于匹配一个任意字符,限定符(?、+、*、)用于匹配某个字符连续出现的次数。05 正则表达式语
10、法字符字符说明明示例示例结果果.匹配一个任意字符p.P?匹配前面的字符零次或一次hone?y+匹配前面的字符一次或多次co+me*匹配前面的字符零次或多次co*men匹配前面的字符n次ne2dn,匹配前面的字符最少n次ne2,dn,m匹配前面的字符最少n次,最多m次lug0,205 正则表达式语法例:如何使用正则完成一个11位数字组成的手机号的验证。要求手机号以1开头,第2位数字是3、4、5、7、8中的一个,胜于的数字可以是0-9之间的任意数字。05 正则表达式语法2.贪婪与懒惰匹配当点字符和限定字符连用时,可以实现匹配指定数量范围的任意字符。例如,“pre.*end$”可以匹配以pre开始到
11、end结束,中间包含零个或多个任意字符的字符串。正则表达式在实现指定数量范围的任意字符匹配时,支持贪婪匹配和惰性匹配两种方式。所谓贪婪表示匹配尽可能多的字符,二惰性表示匹配尽可能少的字符。在默认情况下是贪婪匹配,若想要实现惰性匹配,需在上一个限定符的后面加上“?”符号。05 正则表达式语法例:/贪婪匹配preg_match(/p.*h/,phphphph,$matches);print_r($matches);/懒惰匹配preg_match(/p.*?h/,phphphph,$matches);print_r($matches);从上面示例可以看出,贪婪匹配时,会获取最先出现的p到最后出现的h
12、,即可获得匹配结果为“phphphph”;懒惰匹配时,会获取最先出现的p到最先出现的h,即可获取匹配结果“ph”。05 正则表达式语法3.括号字符在正则表达式中,括号字符“()”有两个作用:一是改变限定符的作用范围;二是分组。(1)改变限定符的作用范围改变作用范围前正则表达式:firm|sh可匹配的结果:firm、sh改变作用范围后正则表达式:fi(rm|sh)可匹配的结果:firm、fish05 正则表达式语法(2)分组分组前正则表达式:bana2可匹配的结果:banaa分组后正则表达式:ba(na)2可匹配的结果:banana05 正则表达式语法例:以常见的“年-月-日”形式的日期格式匹配
13、为例。其中,年份可以从1000到9999,月份从1到12,天数从1到31。不考虑复杂的同月份天数不同的问题。05 正则表达式语法注:在正则表达式中还支持反向引用,如“1”表示引用第1个小括号的匹配结果。反向引用,就是依靠子表达式的”记忆”功能,匹配连续出现的字串或是字符。如(dqs)(pps)12,表示匹配字符串dqsppsdqspps。05 正则表达式语法4.模式修饰符在PHP正则表达式的定界符外,还可以使用模式修饰符,用于进一步对正则表达式进行设置。模式符模式符说明明示例示例可匹配可匹配结果果i模式中的字符将同时匹配大小写字母/con/iCon、con、cOn等m目标字符串视为多行/P.*
14、/mPHPnPCs将字符串视为单行,换行符作为普通字符/Hi.*my/sHinmyx将模式中的空白忽略/n e e d/xneedA强制仅从目标字符串的开头开始匹配/good/A相当于/good/D模式中$元字符仅匹配目标字符串的结尾/it$/D忽略最后的换行U匹配最近的字符串/U匹配最近一个字符串05 正则表达式语法在实际运行中,各种运算符会遵循优先级顺序,PHP中常用的正则表达式运算符优先级由高到低的顺序如下表所示。运算符运算符说明明转义符()、(?:)、(?=)、括号和中括号*、+、?、n、n,、n,m限定符、$、任何元字符、任何字符定位点和序列|替换06 PCRE兼容正则表达式函数1.
15、preg_match()函数功能:进行正则表达式匹配语法:int preg_match(string pattern,string subject,array matches,int flags)其中:第一个参数是正则表达式,第二个参数是被搜索的字符串,即在 subject 字符串中搜索与 pattern 给出的正则表达式相匹配的内容。06 PCRE兼容正则表达式函数第3个参数用于以数组形式保存匹配到的结果。$matches0 将包含与整个模式匹配的文本,$matches1 将包含与第一个捕获的括号中的子模式所匹配的文本,以此类推。注意:preg_match()函数在正则匹配时,只要匹配到符合
16、的内容,就会停止继续匹配。所以匹配结果要么是 0 次(没有匹配),要么是1 次。第4个参数可以设置为“PREG_OFFSET_CAPTURE”,表示将第一次匹配到指定规则的内容所在位置的偏移量添加到$matches中,待查字符的开始位置从0开始计算。例如,字符串”abdbc”中的“a”的偏移量是0,“c”的偏移量是4。06 PCRE兼容正则表达式函数2.preg_match_all()函数功能:与preg_match()函数的功能类似,区别在于preg_match()在第一次匹配成功后就停止查找,preg_match_all()函数会一直匹配到最后才停止,获取到所有相匹配的结果。语法:int
17、preg_match_all(string pattern,string subject,array matches,int flags)06 PCRE兼容正则表达式函数3.preg_grep()函数功能:对于数组中的元素正则匹配,经常使用preg_grep()函数语法:array preg_grep(string pattern,array input)其中:第1个参数表示正则表达式模式,第2个参数表示待匹配的数组。在默认情况下,该函数的返回值是符合正则规则的数组,同时保留原数组中的键值关系。除此之外,该函数还可以将第3个参数设置为PREG_GREP_INVERT,获取不符合正则规则的数组。
18、06 PCRE兼容正则表达式函数例:06 PCRE兼容正则表达式函数4.preg_replace()函数功能:通过正则表达式完成字符串的搜索和替换语法:mixed preg_replace(mixed pattern,mixed replacement,mixed subject,int limit)preg_replace()函数首先会搜索第3个参数中符合第1个参数正则规则的内容,然后使用第2个参数进行替换。其中,第3个参数的数据类型决定着返回值的类型。06 PCRE兼容正则表达式函数例1 将字符串”hello,中国”中的hello替换为你好pattern=/hello/;str=preg_
19、replace(pattern,你好,str);例2 去除字符串”gawwenngeeojjgegop”中连续相同的字母$str=gawwenngeeojjgegop;$pattern=/(.)1/;$str=preg_replace($pattern,$str);06 PCRE兼容正则表达式函数另外,正则的匹配规则和替换的内容都可以是数组类型。例:注意:正则匹配规则和替换内容是数组时,其替换的顺序仅与数组定义时编写的顺序有关,与数组的键名无关。06 PCRE兼容正则表达式函数在使用preg_replace()函数实现正则匹配内容替换时,默认允许替换次数是所有符合规则的内容,其值是-1,表示无
20、限次。另外,还可以根据实际情况设置允许替换的次数。例:06 PCRE兼容正则表达式函数当需要替换的内容很多时,若需要了解preg_replace()函数具体完成了几次指定规则的替换,可以按照如下的方式实现。06 PCRE兼容正则表达式函数5.preg_split()函数功能:通过正则表达式分割字符串,用于完成复杂字符串的分割操作。语法:array preg_split(string pattern,string subject,int limit,int flags)其中:第1个参数为正则表达式分割符;第2个参数表示待分割的字符串;第3个参数表示字符串分割的次数,当值为-1、0或null中的任
21、何一种,都表示不对分割的次数进行限制;06 PCRE兼容正则表达式函数第4个参数flags 可以是下列标记的任意组合(用按位或运算符|组合):PREG_SPLIT_NO_EMPTY:preg_split()只返回非空的成分。PREG_SPLIT_DELIM_CAPTURE:定界符模式中的括号表达式也会被捕获并返回。PREG_SPLIT_OFFSET_CAPTURE:对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其在 subject 中的偏移量。06 PCRE兼容正则表达式函数(1)按照规则分割例:按照字符串中的“”和“.”两种分割符进行分割。06 PCRE兼容正则表达式函数(2)指定分割次数例:06 PCRE兼容正则表达式函数(3)指定返回值形式例:本章小结本章讲述的主要内容包括字符串的处理函数、正则表达式的基本概念、正则表达式的语法规则、PCRE兼容正则表达式函数以及正则表达式常见的应用案例。通过本章的学习,希望大家能够熟练掌握PHP字符串的处理函数以及正则表达式的书写规则,可以使用正则表达式对简单的字符串进行匹配操作。
限制150内