2024年2月9日发(作者:)

(个人收集学习笔记)4字符串处理与正则表达式

第四章字符串处理与正则表达式

一、字符串处理介绍

1、如果字符串处理函数和正则表达式都可以实现字符串操作,建议使用字符串处理函数,因为效率高。

2、因为PHP 是弱类型语言,所以其他类型的数据一般都可以直接应用于字符串操作函数里,而自动转换成字符串类型进行处理。

3、还可以将字符串视为数组,或当作字符集合来看待。$str[0]$str{0}

二、常用的字符串输出函数

1、echo()函数:使用它的效率要比其他字符串输出函数高。

2、print()函数:功能和echo()一样,但它有返回值,成功返回1,不成功返回0。

3、die()函数:exit()函数的别名。

1)参数如果是字符串,则该函数会在退出前输出它。

2)如果参数是一个整数,这个值会被用做退出状态。值在0-254之间,退出状态255由PHP 保留,不会使用。状态0用于成功终止程序。

4、printf():用于输出格式化字符串。

1)例子:printf(“%s age is $d”,$str,$num);

2)%d :带符号十进制数

%u :无符号十进制数

%f :浮点数

%s :字符串

%b :二进制数

%c :依照ASCII 值的字符

%%:返回百分比符号

%o :八进制数

%x :十六进制数(小写字母)

%X :十六进制数(大写字母)

3)如果%符号多于arg 参数,则必须使用占位符。占位符被插入到%符号之后,由数字和$组成。如:printf(“The %2$s book

contains %1$d ’s a nice %2$s full of %1$d

pages”,$num,$str);%2$s 代表$str 。

5、sprintf()函数:用法和printf()一样,但它不是输出字符串,而是把格式化的字符串以返回值的形式写入到一个变量中。

三、常用的字符串格式化函数

字符串的格式化就是将字符串处理为某种特定的格式。通常用户从表单中提交给服务器的数据都是字符串形式。

注意:PHP 中字符串处理函数,大部分都不是在原字符串上修改,而是返回新字符串。

1、去除空格和字符串填补空白

(1)string trim($str,$charlist)、ltrim()、rtrin():删除字符串两侧空格或其他预定义字符。L A M P 兄弟连

1)空格也是一个有效的字符。PHP 接收表单数据时,首先处理的就是删除字符串中多于的空格或其他一些无意义的符号。

2)如果不指定过滤字符串($charlist ),默认会去掉下列字符:空格、NULL 、t 、n 、r (回车)

3)可以使用..符号指定要去除的一个范围,如0..9或a..z

4)如果指定了要删除的字符,那就不会删除系统默认的要删除的字符。

4)trim($str,“0..9A..Z .”);去除两边数字、大写字母和.符号还有空格。

(2)string str_pad($str,$length[,$pad_string[,$pad_type]]):对字符串进行填补。

1)如果没有指定填补时所用字符串,默认使用空格填充。

2)第二个参数是给定处理完以后字符串的长度,第三个参数是指定填充的字符。

3)最后一个参数指定填补方向,有三个值:STR_PAD_BOTH 、

STR_PAD_RIGHT (默认)、STR_PAD_LEFT

4)默认先填充右侧。如:

$a ="aaaaa";

echo str_pad($a,10,"-",STR_PAD_BOTH);

结果:--aaaaa---

2、字符串大小写的转换

(1)strtoupper():把给定的字符串全部转换为大写字母

(2)strtolower():把给定的字符串全部转换为小写字母

(3)ucfirst():把给定的字符串首字母转换为大写字母

(4)ucwords():把给定的字符串每个以空格隔开的单词首字母转换为大写字母

3、和HTML 标签相关的字符串格式化

(1)nl2br($str):在字符串中的每个新行“n ”之前插入HTML 换行符“

(2)htmlspecialchars($str[,$type[,$style]]):可以将HTML 标记转换为HTML 实体。

1)第二个参数是转换引号的类型,有:只转换双引号、两种引号都转换、两种引号都不转换

2)第三个参数是设置字符集,默认是ISO8559-1,如果无法被识别的字符集将被忽略,并由默认的ISO8559-1替代。

3)转换的标记有:&:&双引号:"单引号:'小于:<大于:>

(3)htmlentities():可以将所有非ASCII 码字符转换为对应的实体代码,格式同htmlspecialchars()。

如:echo htmlentities($str,ENT_QUOTES,gb2312);

(4)stripslashes($str):删除反斜线

1)因为被提交的表单数据中的“’”、“””和“”等字符前将被自动加上一个斜线“”。这是由于配置文件中magic_quote_gpc 在起作用。

2)通常使用htmlspecialchars()函数与stripslashes()函数复合的

方式,联合处理表单数据。

3)如果有两个“”则只删除一个

(5)addslashes($str):在“’”、“””和“”等字符前加上一个斜线“”

(6)strip_tags($str[,$allowType]):删除HTML 标签

1)第二个参数是选择可以保留的标签,其余全部删除。默认删除所有标签。

2)有时直接删除用户输入的HTML 标签也是非常有必要的,像布告栏、留言板等。

4、其他字符串格式化函数

(1)strrev($str):将输入的字符串反转。L A M P 兄弟连

(2)number_format($num[,$decimals[,$style1,$style2]]):通过千位数组来格式化数字。

1)该函数支持一个、两个或4个参数。

2)第二个参数是保留几位小数,如果设置了该参数则使用“.”作为小数点来格式化数字;

第三个参数是用什么字符作为小数点;第四个参数是用什么字符作为千位分隔符;

3)如果只给一个参数,则格式化为不带小数点,且以都好作为千位分隔符。

(3)md5($str):给字符串加密。

1)返回32位十六进制字符串。

四、字符串比较函数

1、strcmp($str1,$str2):比较字符串

(1)按字节顺序比较字符串。从首字节开始比较,如相等进入下一个字节比较。

(2)如str1=str2返回0;如str1>str2返回1;如str1

(3)也可以对中文等多字节字符进行比较。

(4)strcasecmp()函数忽略大小写比较。

2、strnatcmp($str1,$str2):自然排序法。

(1)即将字符串中的数字部分按照数字大小进行比较,如4比33小。

(2)返回值同strcmp();

(3)strnatcasecmp()函数忽略大小写比较。

五、字符串查找与匹配

1、preg_match($pattern,$str,$match):

(1)在$str 中查找匹配$pattern 正则的字符串,并保存到$match 数组中,返回全模式匹配的次数0或1。

(2)该函数只做一次匹配。$match[0]保存第一套全模式和子模式的内容,依次类推。

(3)$match[0]保存了与全模式匹配的内容,$match 其它元素匹配了与子模式匹配的内容。

2、preg_match_all($pattern,$str,$match[,$type]):

(1)该函数与preg_match()区别是会一直搜索到制定字符串的末尾,可以获得所有匹配的结果。

(2)将结果存到$match 数组中,并返回全模式匹配的次数。

(3)第四个参数会根据它指定的顺序将每次出现的匹配结果保存到第三个参数数组中。

PREG_PATTERN_ORDER :默认。

PREG_SET_ORDER :$match[0]为第一组匹配项的数组,其中有第一个全模式匹配的内容,和子模式匹配的内容。以此类推3、preg_grep($pattern,$array):该函数是匹配数组中的元素

(1)依次将数组中元素与正则模式匹配,并返回一个数组结果。

4、strstr($beiStr,$str):搜索一个字符串在另一个字符串中第一次的出现。

(1)返回这个字符串其余部分(从匹配点)。

(2)第一个参数是被搜索的字符串,第二个是要搜索的字符串,如果是数字,则匹配对应ASCII 值。

(3)stristr()不区分大小写。

strpos($beiStr,$str)、strrpos():查找一个字符串在另一个字符串中第一次(最后一次)出现的位置。

(1)stripos()、strripos()不区分大小写。

substr($str,$location):返回字符串的一部分。

(1)$location 是其实位置。subistr()不区分大小写。

L A M P 兄弟连

六、字符串替换

复杂的替换用preg_replace(),简单的用str_replace()

1、str_replace($reg,$relace,$str[,$limit]):

(1)在(第三个参数)字符串中寻找与第一个参数匹配的子字符串,并用第二个参数字符串替换。

(2)第四个参数是仅替换limit 个匹配,如果省略limit 或者为-1,则所有的匹配项都会被替换。

(3)使用该函数时,最常见的形式就是可以包含反向引用。即用n 的形式,n 可以是0-99,0代表全模式匹配的内容。最好使用”${n}”的形式。只有使用模式修正符e ,才可以在替换字符串中使用后向引用。

如:$reg =“/(d{2})(d{2})(d{4})/e”;

$text =‘01/25/2009到/02/02/2009’;

echo preg_replace($reg,“${3}-${1}-${2}”);

(4)前三个参数都可以是数组,如果第一个参数是数组,则用第一个参数中的每个配对的值用第二个参数字符串替换;如果第一个和第二个都是数组,则用两个数组中对应的值替换,如果第二个参数数组元素小于第一个元素,则余下的替换值用空字符串替换;如果第三个参数是数组,则会对其中的每个元素都执行搜索和替换,并返回替换后的一个数组。

2、str_replace($search,$replace,$str[,$count]):

(1)在第三个参数字符串中寻找与第一个参数正则匹配字符串,并用第二个字符串替换。第四个参数是传入的一个变量名,用来保存替换的次数。

(2)参数类型和使用同preg_replace()。

(3)str_ireplace():不区分大小写。

七、字符串分割和连接

1、preg_split($reg,$str[,$limit[,$flag]]):

(1)用第一个参数正则表达式所规定的分隔符,分隔第二个参数字符串。第三个参数是限制分割的次数,如果是-1则表示不限制。

(2)最后一个参数有一下值:

PREG_SPLIT_NO_EMPTY :只返回非空部分

PREG_SPLIT_OFFSET_CAPTURE :返回的数组中的每一个元素也是一个数组,其中第一项为分割的字符串,第二项为其在$str 中的偏移量。

2、explode($separator,$str[,$limit]):分割字符串

(1)用第一个参数字符串当作分隔符,分隔第二个参数字符串。第三个参数为将字符串分割成多少个子字符串。返回分割后组成的数组。

(2)如果$separator 为空字符串””,则返回false 。如果$separator 的值在$str 中找不到,则返回$str 单个元素的数组。

(3)如果$limit 使用负数(如-2),则返回除最后2个分隔的字符串。

3、implode($glue,$array):连接字符串

(1)用第一个参数当作连接符,合并第二个数组中所有元素字符串。

八、正则表达式

1、组成:正则表达式由定界符、原子、元字符、模式修正符组成一个模式。

2、定界符:除了字母、数字、正斜线“”以外任的字符都可以作为定界符号。一般用“/”。

3、原子:可以单独使用的符号。L A M P 兄弟连

s (S ):任何一个(非)空白字符

d (D ):任意一个(非)数字

w (W ):任意一个(非)数字、字母或下划线

n :换行

r :回车

t :制表符

f :换页符

.:除换行符以外的任意一个字符

4、元子符:用于构建正则表达式的具有特殊含义的字符。如果要在正则表达式中包含元子符本身,要用“”转义。

*:任意次

+:1次以上

:1次或0次

{n}:恰好出现n 次

{n,}:至少出现n 次

{n,m}:至少出现n 次,最多m 次

():将多个原子组成一个大原子叫子模式

[]:匹配括号中任意一个原子

[^]:匹配括号中原子以外的一个字符

^:以。。。开头

$:以。。。结束

|:或(优先级最低)

b :匹配单词边界

B :非边界

注意:

1)后向引用:/^d{4}Wd{2}Wd{2}$/匹配日期格式如2011-08-04

/^d{4}(W)d{2}1d{2}$/与上面效果一样

如果需要使用模式单元却又不想存储匹配结果,可以用(?:W)

在双引号里使用”1”,但在单引号里要使用”1”。因为1是正则表达式里的固定模式,不需转义。

2)因为“|”优先级最低,所以/ABC|BCD/不会匹配成ABCCD

或ABBCD 。

3)“.”不匹配的换行符在WIN 系统中是[^nr],LINUX 中是[^n]

4).*?贪婪模式(效果同U ):如有aaabbbccc

用/^.*$/匹配出:aaabbbccc整体

用/^.*?$/匹配出:aaa、bbb、ccc三个

5、模式修正符

(1)在正则表达式最后一个斜线“/”后面加。

(2)i :不区分大小写

s :模式中的元子符“.”匹配任意字符

U :贪婪模式,最大限度匹配(最大限度是指匹配的个数尽量的多)

x :模式(正则表达式)中的空白忽略不计

e :配合preg_replace()使用后向引用L A M P 兄弟连