字符串与正则表达式.ppt

上传人:tian****1990 文档编号:12851785 上传时间:2020-05-31 格式:PPT 页数:35 大小:1.48MB
返回 下载 相关 举报
字符串与正则表达式.ppt_第1页
第1页 / 共35页
字符串与正则表达式.ppt_第2页
第2页 / 共35页
字符串与正则表达式.ppt_第3页
第3页 / 共35页
点击查看更多>>
资源描述
4.字符串与正则表达式,4.1字符串处理,4.2正则表达式应用,4.字符串与正则表达式,4.1字符串处理,4.1.1字符串的输出print():输出一个字符串:intprint(stringarg)arg指定要输出的字符串。函数返回值总是1。print不是真正的函数,而是一个语法结构,因此其参数可以不使用括号。printf():输出一个格式化的字符串:intprintf(stringformat,mixedargs,mixed.)args指定要输出的参数,不同参数之间以逗号分隔。format指定输出的格式,以“%”开始到转换字符为止。sprintf():返回一个格式化的字符串:stringsprintf(stringformat,mixedargs,mixed.)参数同printf()。,4.1字符串处理,4.1.2大小写转换strtolower():把一个字符串中的所有字母都转换为小写形式:stringstrtolower(stringstr)strtoupper():把一个字符串中的所有字母都转换为大写形式:stringstrtoupper(stringstr)ucfirst():把一个字符串中的首字母转换为大写形式:stringucfirst(stringstr)ucwords():把一个字符串中所有单词的首字母都转换为大写形式:stringucwords(stringstr),4.1字符串处理,4.1.3从字符串的左或右删除空格trim():去除字符串开始位置和结束位置的空格或其他字符,并返回处理后的字符串:stringtrim(stringstr,stringcharlist)ltrim():去除字符串左边的空格或其他字符并返回处理后的字符串:stringltrim(stringstr,stringcharlist)rtrim():去除字符串右边的空格或其他字符并返回处理后的字符串:stringrtrim(stringstr,stringcharlist),参数str:要处理的字符串;参数charlist(可选):用于指定要去除的字符,也可以用“.”指定要删除的字符的范围。,4.1字符串处理,4.1.4求字符串长度strlen():返回字符串的长度:intstrlen(stringstr)参数str表示待求长度的字符串;,说明:中文字符和中文标点符号各占2个字节,英文字母和英文标点符号各占1个字节。,有时遇到strlen()计算的一个汉字占3个字节的问题,原因如下:与系统所采用的字符编码方式有关:1.utf-8如果系统采用的是utf-8,那么strlen(汉字)=6,即一个汉字占用3个字节。2.gb2312如果系统采用的是gb2312,则strlen(汉字)=4,即一个汉字占用2个字节。,实训1,创建一个php动态网页,(1)创建原始字符串1:“你看不到我,我是空格”;计算原始字符串1的长度;去除原始字符串1两端的空格,并重新计算该字符串的长度;(2)创建原始字符串2:“kingdombda”;计算原始字符串2的长度;去除原始字符串左边的“”,去除右边的从“a”到“d”范围内的字符;重新输出该字符串;重新计算该字符串的长度。,4.1字符串处理,4.1.5HTML文本格式化nl2br():把字符串中的所有换行符(“n”)转换为HTML换行标记并返回经过处理的字符串:stringnl2br(stringstr)htmlspecialchars():把字符串中的一些特殊字符替换为HTML文本实体并返回经过处理的字符串:stringhtmlspecialchars(stringstr,intquote_style,stringcharset)htmlentities():把字符串中的一些HTML标签转换为HTML实体并返回经过处理的字符串:stringhtmlentities(stringstr,intquote_style,stringcharset)strip_tags():从字符串中去除所有PHP和HTML标记并返回经过处理的字符串:stringstrip_tags(stringstr,stringallowable_tags)参数allowable_tags用于指定要保留的PHP或HTML标记。,4.1字符串处理,4.1.5HTML文本格式化stringhtmlspecialchars(stringstr,intquote_style,stringcharset)stringhtmlentities(stringstr,intquote_style,stringcharset)以上两个函数的作用十分类似(格式化HTML代码):参数quote_style指定字符转换的方式,可选用以下预定义常量之一:ENT_COMPAT:表示只转换双引号(默认);ENT_QUOTES:表示转换单引号和双引号;ENT_NOQUOTES:表示不转换任何一种引号。参数charset指定转换过程中使用的字符集。如:“GB2312”。以上两个函数都可以实现以下5个特殊字符的转换:“”区别:htmlspecialchars只转化以上5个特殊字符,而htmlentities却会转化所有的html代码,连同里面的它无法识别的中文字符也给转化了。,4.1字符串处理,4.1.5HTML文本格式化测试页面;echohtmlentities($str);echo“”;$str=测试页面;echohtmlspecialchars($str);?,结论:htmlentities函数把中文字符也转化了,建议字符串含有中文时使用htmlspecialchars函数。,实训2,创建一个PHP动态网页,要求原样显示以下HTML代码。PHP动态网页开发,4.1字符串处理,4.1.6添加或去除反斜线addslashes():为sql语句等字符串中需要添加反斜线(转义符)的地方添加反斜线(转义符),并返回处理后的字符串:stringaddslashes(stringstr)stripslashes():去除字符串中的反斜线并返回处理后的字符串:stringstripslashes(stringstr),4.1字符串处理,4.1.6字符串的连接与分割implode():将数组元素连接成一个字符串并返回该字符串:stringimplode(stringglue,arraypieces)参数glue指定用于连接数组元素的符号;参数pieces表示要连接成一个字符串的数组。explode():使用一个字符串分割另一个字符串:arrayexplode(stringseparator,stringstr,intlimit)参数separator指定分隔符;参数str表示待分割的字符串。参数limit:表示返回的数组最多包含limit个元素,最后的元素将包含str的剩余部分。若limit为负数,则返回除最后limit个元素之外的所有元素。,4.1字符串处理,4.1.7字符串的连接与分割strtok():把一个字符串按照另一个字符串的值分割成若干个字符串:stringstrtok(stringstr,stringtoken)参数str表示待分割的字符串;参数token指定所使用的分隔符。只有第1次分割时,需要通过第一个参数来指定被分割的字符串。当完成第1次分割时,将自动记录下第1次分割后的指针位置。如果继续调用该函数,则会从新的指针位置进行分割。因此,从第2次函数调用开始,可以省略第1个参数。若要使指针返回初始状态,则应将被分割字符串作为第1个参数传递个strtok()函数。,4.1字符串处理,4.1.8比较字符串strcmp():比较两个字符串的大小。intstrcmp(stringstr1,stringstr2)如果两个字符串完全匹配,则返回0;如果str1str2,则返回正数。strncmp():与strcmp()类似,比较两个字符串的前n个字符:intstrncmp(stringstr1,stringstr2,intn)n为从头开始进行比较的字符数返回值与strcmp()类似,4.1字符串处理,4.1.9查找字符串strpos():查找子串needle在字符串haystack中首次出现的位置(区分大小写):intstrpos(stringhaystack,mixedneedle,intoffset)stripos():与strpos()功能基本相同,只是不区分大小写:intstripos(stringhaystack,mixedneedle,intoffset)strrpos():查找子串needle在字符串haystack中最后一次出现的位置:intstrrpos(stringhaystack,mixedneedle,intoffset)参数haystack表示原字符串;参数needle表示待查找的子串。若needle不是字符串类型,则自动转换为整型,并作为字符的值使用。参数offset:表示从字符串haystack的第offset个字符处开始查找。第1个字符的位置为0。若找到needle,则以数字形式返回其在haystack中的位置,若找不到,则返回false。,4.1字符串处理,4.1.10替换字符串str_replace():在一个字符串中查找一个子串的所有出现并使用新字符串替换该子串:mixedstr_replace(mixedsearch,mixedreplace,mixedsubject,int&count)str_irepalce():与str_replace()函数的功能基本相同,只是不区分大小写:mixedstr_ireplace(mixedsearch,mixedreplace,mixedsubject,int&count)参数search表示要被替换的目标子串;参数replace表示用于替换的新子串;参数subject表示原字符串;参数count表示被替换的次数;前3个参数可以是字符串或数组。不同组合的情况见课本P84。,4.1字符串处理,4.1.10替换字符串substr_replace():替换子串的文本内容并返回替换后的字符串:mixedsubstr_replace(mixedstr,stringreplacement,intstart,intlength)参数str表示原字符串。参数replacement表示用于替换原有内容的新字符串。参数start指定执行替换的起始位置。若start为正,则从start偏移处开始替换;若start为负,则从字符串str末尾的第start个字符处开始替换。参数length指定替换范围的大小。若省略参数length,则从原字符串起始处开始替换;若length为正,表示字符串str中被替换的长度为length;若length为负,则从字符串str末尾向前数-length个字符,在此处停止替换。,4.1字符串处理,4.1.11获取子串substr():返回从字符串str的start偏移处开始,长度为length的子串:stringsubstr(stringstr,intstart,intlength)参数start:。若start为非负数,则从start偏移处开始获取子串,start从0算起;若start为负数,则从字符串str末尾的第-start个字符处开始获取子串。若start超出了字符串str的范围,则返回false。参数length:若省略参数length或其值大于字符串str的长度,则返回从起始位置开始的所有字符;若length为正,则从起始位置开始获取长度为length的子串;若length为负,则表示从字符串str末尾向前忽略的字符串长度。,4.1字符串处理,4.1.11获取子串strstr():在字符串haystack中查找一个子串needle的首次出现位置。若找到,则返回从该位置起到字符串haystack结束的所有字符;若找不到,则返回false:stringstrstr(stringhaystack,stringneedle)stristr():与strstr()函数功能基本相同,只是不区分大小写:stringstrstr(stringhaystack,stringneedle)strrchr():在字符串haystack中查找字符needle的最后一次出现位置。若找到,则返回从该位置起到字符串haystack结束的所有字符;若找不到,则返回false:stringstrrchr(stringhaystack,stringneedle),实训3,创建一个PHP动态网页,要求从路径“F:phpdocschap04page4-09.php”中提取出文件名。提示:使用strrpos()和substr()两个函数。,4.2正则表达式应用,学习目标:学会编写正则表达式掌握php正则表达式函数的基本应用,4.2正则表达式应用,4.2.1正则表达式概述正则表达式是从左向右去匹配目标字符串的一组模式,它由两种基本的字符类型组成:普通字符(如:AZ,09等)和特殊字符(如:*、?、|等)。普通字符:也称为原义字符,这些字符在模式中表示它们自身并匹配目标中相应的字符。特殊字符:也称为元字符,简单地说是用于表示任意数量的任意字符的字符。,4.2正则表达式应用,4.2.1正则表达式概述PHP有两种类型的正则表达式,即:Perl兼容正则表达式和POSIX扩展正则表达式,它们的基本结构相同,但语法格式稍微有些区别。Perl兼容正则表达式中所使用的模式与Perl类似,表达式应被包含在定界符中,通常使用正斜线(/)作为定界符。任何不是字母、数字或反斜线()的字符都可以作为定界符。如果作为定界符的字符必须被用在表达式本身中,则需要用反斜线转义。如:/(d3-)(d8)$|(d4-)(d7)$/POSIX扩展正则表达式则不需要定界符。如:(d3-)(d8)$|(d4-)(d7)$,4.2正则表达式应用,4.2.2编写正则表达式反斜线():这是一个通用转义符转义字符:d任一十进制数字相当于0-9D任一非十进制数字相当于0-9w任一字母数字字符或下划线字符相当于a-zA-Z_0-9W除字母、数字、下划线以外的字符相当于a-zA-Z_0-9s任一空白字符,如分页、换行、回车、制表符等相当于fnrtS任一非空白符xhh十六进制代码为hh的字符ddd八进制代码为ddd的字符方括号():用于定义一个字符集。连字符(-):用在字符类中,指出字符的范围。音调符号()有以下两种使用方法:若用在方括号之外,则表示匹配目标字符串的开头。若用在方括号之内,则表示不接受该字符集合。美元符号($):表示匹配目标字符串的结尾。,4.2正则表达式应用,4.2.2编写正则表达式花括号():用于定义一个数量限定符。m:表示前面的子模式重复m次。如:模式“ab2”与字符串“abb”匹配;模式“d3”与“123”,“801”等3位十进制数字符串匹配。m,:表示前面的子模式至少要重复m次。如模式“ab2,”与字符串“abb”、“abbbbb”等匹配,与“ab”不匹配。m,n:表示前面的子模式至少重复m次,最多重复n次。如模式“ab3,5”,与字符串”abbb”、”abbbb”、”abbbbb”匹配。问号(?):表示匹配前面的子模式0次或1次,等价于0,1。如:模式”do(es)?”可以匹配字符串”do”或”does”。星号(*):表示匹配前面的子模式0次或多次,等价于0,。如:模式”go*d”可以匹配字符串”gd”、”god”、”good”及”goood”。加号(+):表示匹配1个或多个数量限定符,等价于1,。如:模式”do+g”可以匹配字符串”dog”、”doog”、”dooog”等,但不匹配字符串”dg”。,4.2正则表达式应用,4.2.2编写正则表达式句点(.):在默认情况下,匹配除了换行符(n)以外的任意一个字符。如:模式“p.p”,与字符串“php”匹配,与字符串“photoshop”不匹配。竖线(|):表示多中选一。如:模式“com|net|org”,与字符串“com”、“net”、“org”的任一个匹配。b:匹配单词边界,边界可以是空格或者特殊字符。如:模式“bisb”,与字符串“whatisthat”、”what-is“匹配,与”whatisthat”不匹配。B:匹配没有单词边界的内容如:模式“BisB”,与”whatisthat”匹配,与字符串“whatisthat”、”whatis“不匹配,。圆括号(()):用于定义一个子模式的开始和结束。将多选一的分支局部化。如:模式“appl(e|y)”,匹配字符串“apple”和“apply”。将子模式设定为捕获子模式。括号中的内容放入内存,并可使用1234依次引用。注意:当出现嵌套圆括号时,以左括号出现的先后顺序来确定引用项的编号。,4.2正则表达式应用,4.2.2编写正则表达式,运算顺序:,依然遵循从左到右的运算规则,优先级,()圆括号因为是内存处理所以最高*?+重复匹配内容其次$b边界处理第三|条件处理第四最后按照运算顺序计算匹配,4.2正则表达式应用,正则表达式在PHP中的应用:匹配(搜索)替换分割,4.2正则表达式应用,4.2.3正则表达式搜索以下函数是Perl兼容正则表达式函数。preg_match()函数执行正则表达式搜索:intpreg_match(stringpattern,stringsubject,arraymatches,intflags)在subject字符串中搜索与pattern正则表达式相匹配的内容。若有参数matches,则把搜索结果填充到matches数组中。其中,$matches0存放与整个模式匹配的文本,$matches1存放与第1个圆括号中的子模式所匹配的文本,$matches2存放与第2个圆括号中的子模式所匹配的文本,以此类推。若设置参数flags的值为PREG_OFFSET_CAPTURE,则对每个出现的匹配结果也同时返回其附属的字符串偏移量。此时matches是二维数组,其每个内层数组含有两个元素,第1个元素匹配字符串,第2个元素匹配其偏移量。返回值是pattern匹配的次数。该函数在第1次匹配之后就停止搜索,返回值为1表示匹配成功,0表示没有匹配,false表示运行出错。,4.2正则表达式应用,4.2.3正则表达式搜索以下函数是Perl兼容正则表达式函数。preg_match_all()函数执行全局正则表达式搜索:intpreg_match_all(stringpattern,stringsubject,arraymatches,intflags)本函数在字符串subject中搜索所有与pattern给出的正则表达式匹配的内容并将结果以flags指定的顺序放到数组matches中。参数flags说明见课本P90。,4.2正则表达式应用,4.2.3正则表达式搜索以下两个函数是POSIX兼容正则表达式函数。ereg()函数执行正则表达式搜索:boolereg(stringpattern,stringstring,arrayregs)eregi()函数以不区分大小写方式执行正则表达式搜索:booleregi(stringpattern,stringstring,arrayregs),实训4,创建一个php动态网页,借助preg_match或ereg函数,把日期字符串“5/16/2013”转换为“2013年5月16日”。,4.2正则表达式应用,4.2.4正则表达式替换以下函数中,前者是Perl兼容正则表达式函数,后者是POSIX兼容正则表达式函数。preg_replace()函数执行正则表达式的搜索和替换:mixedpreg_replace(mixedpattern,mixedreplacement,mixedsubject,intlimit)本函数在subject中搜索pattern模式的匹配项并替换为replacement。subject、pattern、replacement都可以是数组。若指定了limit,则仅替换limit个匹配项,若省略limit或limit值为-1,则替换所有匹配项。replacement可以包含“n”或“$n”的形式逆向引用。逆向引用将被替换为与第n个被捕获括号内的子模式匹配的文本。对左圆括号从左到右计数(从1开始)以取得子模式的数目。ereg_replace()函数用于替换正则表达式:stringereg_replace(stringpattern,stringreplacement,stringstr),4.2正则表达式应用,4.2.5用正则表达式分割字符串以下函数中,前者是Perl兼容正则表达式函数,后者是POSIX兼容正则表达式函数。preg_split()函数。使用正则表达式分割字符串,即:返回一个数组,其中包含subject中沿着与pattern匹配的边界所分割的子串:arraypreg_split(stringpattern,stringsubject,intlimit,intflags)limit:指定最多返回limit个子串,若limit值是-1,则没有限制。flags参数可选以下值之一:PREG_SPLIT_NO_EMPTY:只返会非空的元素。PREG_SPLIT_DELIM_CAPTURE:定界符模式中的括号表达式也会被捕获并返回。PREG_SPLIT_OFFSET_CAPTURE:对每个出现的匹配结果同时返回其在原字符串中的偏移量.split()函数用正则表达式把字符串分割到数组中:arraysplit(stringpattern,stringstr,intlimit),
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!