主要内容有:
(1)字符串的格式化输出
(2)文本的搜索
(3)字符串的比较和转换
(4)字符串的分割与组合
(5)字符串的加密
一、字符串格式化
1、使用sprintf来格式化字符串
输出字符串的函数最常见的是echo 和print函数。如果要完成更丰富的输出方式,可以使用sprintf和printf函数。sprintf函数与printf函数的区别在于sprintf函数返回格式化后的字符串,而printf函数直接输出。
sprintf函数返回格式化后的字符串结果,结果可以用于新的作用。 %d、%s起到占位符的作用,其中%d表示所在位置处为一个整数,%s表示所在位置处为一个字符串。注意占位符的个数要与args参数一一对应。常用的占位符如下:
2、使用str_pad来补齐一个字符串
str_pad()函数除了能填充字符串,还提供了更多的参数设置。str_pad()函数的声明如下:
二、使用strlen计算字符串长度
strlen()函数的声明为:int strlen(string str) 。函数返回字符串的长度,空字符串的长度为0.
三、字符串的查找
函数strpos()和stripos()用于查找一个子字符串在一个字符串中出现的位置。这两个函数用法类似,区别是strpos()函数区分大小写。
ps:注意当在源字符串中没有查到子字符串时返回的FALSE,为了与0区分开,需要使用===来判断strpos的返回值(因为0==FALSE,而0===FALSE是假的)。
如果想要查找某个子字符串在指定字符串中最后出现的位置,使用strrpos()函数。与strpos()函数用法一样。
如果要超找字符串时不需要区分大小写,可以使用stripos()函数。
四、使用substr()返回字符串子串
函数substr通过指定起点和长度,获取字符串中其中一部分。
五、使用str_replace替换字符串
可以使用==操作符来简单比较两个字符串,如果要完成更复杂的任务,需要使用字符串比较函数。
1、strcmp函数和strncmp函数
strcmp函数用于比较两个字符串是否相等,也可以用于两个字符串的排序(字符串的排序是指可以通过函数的返回值判断两个字符串中字符的ANSCII值大小)。
strncmp的作用与strcmp类似,strncmp多了一个参数,用于指定比较字符串的长度。
2、不区分大小写的比较函数strcasecmp与strncasecmp
函数strcasecmp的功能和函数strcmp相同,但是strcasecmp是不区分大小写的。
函数strncasecmp的功能和函数strcmp相同,但是strncasecmp是不区分大小写的。
七、字符串的转换
1、大小写转换函数strtoupper与strtolower
函数strtoupper的作用是把给定的字符串转换成大写。string strtoupper(string str).
函数strtolower的作用是把给定的字符串转换成小写。 string strtolower( string str).
2、首字母大小写转换函数
函数ucfirst可以把字符串的首字母转换为大写,函数声明为:string ucfirst(string str).
函数ucwords可以把字符串中每个单词的首字母转换成大写。函数声明为:string ucwords(string str).
八、字符串的切分与组合
1、字符串的切分函数explode
字符串切分函数explode可以将字符串按照分隔符分割为一个数组。如下:
2、字符串的合并函数implode
使用字符串合并函数implode,可以将若干个字符串组合成一个字符串,该函数还有一个别名join。通常将需要合并的字符串放到一个数组中,然后对数组调用implode进行处理。
3、函数str_split平均分割字符串
函数str_split可以将指定的字符串平均分割成小块,函数声明如下:array str_split (string str [, int split_length])。其中第一个参数是需要分割的字符串,第二个参数表示每次切割的长度,默认值是1、函数返回切割后字符串存放的数组。
九、使用MD5加密字符串
PHP自带了MD5加密算法的函数,函数名为md5,可以输出字符串的MD5值。函数原型是: string md5(string str [.bool raw_output]),其中参数raw_output默认为FALSE,此时函数输出32位16进制的MD5值。如果raw_output设为TRUE,函数将输出二进制数。
十、正则表达式
PHP提供两种风格的正则表达式,分别是POSIX正则表达式和Perl风格正则表达式。一个用于可移植操作系统接口(Portable Operating System Interface,POSIX),另一个接口用于 Perl Compatible Regular Expressions (PCRE)。基本上,推荐使用第二个接口,因为 PCRE 比 POSIX 实现更加强大,可以提供能在 Perl 中找到的所有操作符。两种正则表达式的语法不同。
1、POSIX风格正则表达式
POSIX风格正则表达式是PHP编译器的默认风格,常用的函数ereg()、eregi()、ereg_replace()、eregi_replace()和sql_regcase()等。匹配字符串功能可以使用函数ereg和eregi函数来实现。
函数eregi与函数ereg功能相同,区别是eregi在匹配字符串时忽略大小写。
2、PCRE-Perl兼容正则表达式函数
perl风格的正则表达式在语法和函数使用上与POSIX有些诧异,Perl风格的正则表达式的函数有:preg_grep()、preg_match()、preg_replace()、preg_split()、preg_quote()等。
PHP 提供了用于在文本中查找匹配、将每个匹配替换为其他文本(la 搜索和替换)以及在列表的元素之中查找匹配的正则表达式函数。函数包括:
preg_match()
preg_match_all()
preg_replace()
preg_replace_callback()
preg_grep()
preg_split()
preg_last_error()
preg_quote()
(1)preg_match()
函数原型:int preg_match(string pattern, string subject, array [matches]);
这个函数会在string中使用pattern表达式来匹配,如果给定了[matches],就会将string记录到[matches][0]中,[matches] [1]代表使用括号”()”记录下来的第一个字符串,[matches][2]代表记录下来的第二个字符串,以此类推。preg如果在string中找到了匹配 的pattern,就会返回”true”,否则返回”false”。
preg_match()返回 pattern
的匹配次数。 它的值将是0次(不匹配)或1次,因为 preg_match()在第一次匹配后 将会停止搜索。 preg_match_all()不同于此,它会一直搜索subject
直到到达结尾。 如果发生错误 preg_match()返回 FALSE
。
(2) 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
中.在第一个匹配找到后, 子序列继续从最后一次匹配位置搜索.matches参数为多维数组,作为输出参数输出所有匹配结果, 数组排序通过flags
指定。函数返回完整匹配次数(可能是0),或者如果发生错误返回FALSE
。
(2) preg_replace()
函数原型:mixed preg_replace(mixed pattern, mixed replacement, mixed subject);
这个函数会使用将string中符合表达式pattern的字符串全部替换为表达式replacement。如果replacement中需要包含pattern的部分字符,则可以使用”()”来记录,在replacement中只是需要用”\\1“来读取。
(3)preg_split()
函数原型:array preg_split(string pattern, string subject, int [limit]);
这个函数和函数split一样,区别仅在与split可以使用简单正则表达式来分割匹配的字符串,而preg_split使用完全的Perl兼容正则表达式。第三个参数limit代表允许返回多少个符合条件的值。
如:
<?php
//使用逗号或空格(包含" ", \r, \t, \n, \f)分隔短语
$keywords = preg_split("/[\s,]+/", "hypertext language, programming");
?>
(4)preg_grep()
函数原型:array preg_grep(string patern , array input);
这个函数和preg_match功能基本上,不过preg_grep可以将给定的数组input中的所有元素匹配,返回一个新的数组。
ps:使用Perl风格的正则表达式函数解析速度快于POSIX风格的正则表达式函数,但是POSIX风格的正则表达式函数的语法更简单、易用。
PHP中的正则表达式及模式匹配
转载请注明:jinglingshu的博客 » 字符串处理与正则表达式