PHP字符串替换几种函数实例
-
strtr()
-
str_replace()
-
substr_replace()
-
preg_replace()
strtr
1
2
3
4
5
6
7
|
$str = "test" ; $str1 = strtr ( $str , 't' , 'z' ); // zesz $str2 = strtr ( $str , 'tt' , 'z1' ); // 1es1 $str3 = strtr ( $str , 't' , '' ); // test $str4 = strtr ( $str , 'ts' , '12' ); // 1e21 $str5 = strtr ( $str , array ( "t" => '' )); // es $str6 = strtr ( $str , array ( "e" => 'www' , "s" => "hhh" )); // twwwhhht |
str_replace
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
$str = "test" ; $str1 = str_replace ( 't' , '' , $str ); // es $str2 = str_replace ( 'es' , 't' , $str ); // ttt $str3 = str_replace ( array ( 't' , 'sa' ), array ( 'a' , 'b' ), $str ); // aeb $str4 = str_replace ( array ( 't' , 'sa' ), array ( 'a' ), $str ); // ae $str5 = str_replace ( array ( 't' ), array ( 'a' , 'b' ), $str ); // aesa $str6 = str_replace ( array ( 't' , 's' ), 'e' , $str ); // eeee $arr = array ( 'a' => 'testa' , 'b' => 'testb' , 'c' => array ( 'ca' => 'tes1' , 'cb' => 'tes2' , ), ); $arr1 = str_replace ( 'es' , 't' , $arr ); /** $arr1 = array( 'a' => 'ttta', 'b' => 'tttb', 'c' => array( 'ca' => 'tes1', 'cb' => 'tes2', ), ); * * */ |
substr_replace
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
$str = "test" ; echo substr_replace( $str , 'zzz' , 1, 2); // tzzzt $arr = array ( 'a' => 'what' , 'b' => 'are' , 'c' => array ( 'ca' => '11' , 'cb' => '22' , ), ); $arr1 = substr_replace( $arr , 'ok' , 0, 1); /** $arr1 = array( 'a' => 'okhat', 'b' => 'okre', 'c' => 'okarry' ); */ |
preg_replace
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
$arr = array ( 'a' => 'XXX25012349999XXX' , // 不是以1开头 'b' => 'XXX13188887777XXX' , 'c' => 'XXXX918811113333XXXXX' , 'd' => 'XXXX188111133331XXXXX' , ); $re = preg_replace( '/([^0-9])(1\d{10})([^0-9])/' , '$1 mobile:$2 $3' , $arr ); // 利用$1,$3 $re1 = preg_replace( '/(?<=[^0-9])(1\d{10})(?=[^0-9])/' , ' mobile:$1 ' , $arr ); // 使用向前向后匹配,直接匹配的$1电话号 /** Array ( [a] => XXX25012349999XXX [b] => XXX mobile:13188887777 XXX [c] => XXXX918811113333XXXXX [d] => XXXX188111133331XXXXX ) **/ |
strtr
有两种传递参数的格式:一种是数组k=>v形式,一种是两个字符串的形式。直线导轨滑台
一,字符串情况 string strtr ( string $str , string $from , string $to ):
search参数的每个字符和replace参数的字符对应(这个是该函数用法关键)。如果search中出现相同的字符,会按照search中最后一个字符对应的replace参数的字符代替(如第6行代码)。
如果search或者replace是空字符串,则不会被替换,原样输出(如第7行)。
二,数组k=>v情况 string strtr ( string $str , array $replace_pairs ):
这种情况比较简单,就是把字符串中的k替换成v
str_replace
str_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
str_replace()在使用上比较简单:
字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
substr_replace
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
数组替换的时候,也是处理一维数组的字符串值。。
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。