strtr() str_replace() substr_replace() preg_replace()
' E" K$ f2 U3 [8 |strtr()的用法: - <?php
" Z( g5 P$ k. k# s) L7 S" d7 @' }3 q T - # H3 X8 A0 e+ B! `5 D( F w
- $str = "test";
; Z2 S, w! s+ J+ G/ q* u
4 { R" {$ E9 a7 O6 g4 p5 k% Y- $str1 = strtr($str, 't', 'z'); // zesz! r# {* w" u! n o
- $str2 = strtr($str, 'tt', 'z1');// 1es1# }7 `: T1 C9 R1 ^3 @; w5 S6 D
- $str3 = strtr($str, 't', '');// test- A6 j8 m7 |! P. v* @
- $str4 = strtr($str, 'ts', '12');// 1e21
$ T; l( B6 w& v. i" y$ i - 3 d( ^+ X3 n5 ?+ j+ u8 H) b
- ) s6 E1 T) U7 ?
- $str5 = strtr($str, array("t" => '')); // es
# F8 g# L/ Q' O# |/ h4 f& H- S - $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
$ T4 s* S% p; R7 J3 W# r9 e 有两种传递参数的格式,一种是数组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
8 l$ L3 E: u% r, ? Y' gstr_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php
2 @# _5 g& s$ @9 C: b1 ~ - 1 |& U( i- p9 {: f6 i
- $str = "test";# G7 q8 b. x$ w! K' u3 a$ L- F6 o
- & O' o! V' V& m( i* f0 A1 n0 C; G
- $str1 = str_replace('t', '', $str);// es
; c# j# ?. w" O) p0 x4 M - $str2 = str_replace('es', 't', $str);// ttt
^& \! g' f2 S- s - - e$ r. V+ J4 \0 R* U9 U$ b* X1 b( D
- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb. e+ O/ y# C/ w( d U8 R
- $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae. e' L2 Y W4 Z/ n) a
- $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
# T2 I" x6 j) j* w7 S# m - $str6 = str_replace(array('t', 's'), 'e', $str);// eeee3 M$ y, g, e3 x6 J
- + h+ h: p5 Z+ T2 i! I/ }9 q' b3 U
- $arr = array(
4 e3 c, X; Z8 Q" r& B7 z" y, x - 'a' => 'testa',3 S$ ]$ U" k) q# p% Q, B$ Z
- 'b' => 'testb',' m" J5 G" l2 E0 u
- 'c' => array(0 [- L7 w2 `5 c* K+ O7 ~3 o
- 'ca' => 'tes1',) S' T2 ~# e( C1 `( t9 \9 M& Z
- 'cb' => 'tes2',
, \6 Y- N; T- Y/ J. B" ] - ),
+ k/ f& R- v% b' L) B - );
. d- U" z3 {+ q7 y. m6 T( e& X
. D" @& B' k6 G7 _- $arr1 = str_replace('es', 't', $arr);
, `* b' @4 W; W$ w" f% R - /**9 p, Y' k+ @& g/ A* ]2 X8 S
- $arr1 = array(7 [. A5 x6 [) Q2 l) W; d! l
- 'a' => 'ttta',9 m+ p. `9 h0 d+ ?2 O& p
- 'b' => 'tttb',3 R2 a) D% Z% l( \8 z
- 'c' => array(/ @1 W! U6 {; ~# w% g8 x/ M
- 'ca' => 'tes1',: ]4 o: }5 ^5 L( t, F+ l, \$ H
- 'cb' => 'tes2',, Y6 s1 z# y: x; P+ _7 A
- ),! {$ {3 i% x, n4 F0 I, F
- );
6 H; f8 j5 x6 \5 v0 \9 M - *
4 A6 K7 [- }; Z" l9 I6 p d. z - *7 u( m J$ Q( b% x8 n
- */
复制代码 7 X9 O, b& C& G I$ J; J
1 M9 i( P4 Z8 F: t3 p
% S$ l* y X; i( W- }( P ^
str_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
+ m' t3 P2 x& W- Bsubstr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php; q( Q. E2 ~' q: f! j
- ( c! u2 a' ]; i. D
- $str = "test";
* ~4 v( D) c. l8 U/ y, E1 G - # t; ^! L9 Z, ]
- echo substr_replace($str, 'zzz', 1, 2);// tzzzt
9 V: d5 Z) g- W0 n7 d3 D! f
# Z( {8 e( z2 H+ G% r- $arr = array(6 i, e2 w% h5 O" o2 f$ {
- 'a' => 'what',* _5 h- U0 {3 v8 w: ]
- 'b' => 'are',% @; r/ u: q( O. Y3 K+ ~
- 'c' => array(8 V% {& I6 r1 A- o/ u3 Z5 k5 V4 D
- 'ca' => '11',4 ~* }$ ^! o. x5 z: }
- 'cb' => '22',
& n& \6 S. E; M0 p) j+ L - ),) v# s1 l/ ]3 S! F8 B6 M# \* A
- );! p4 f/ J: z; T; p4 j6 }: n9 b
$ c1 I# ~+ {3 }4 Z6 i q- $arr1 = substr_replace($arr, 'ok', 0, 1);/ L8 C! v" i7 h; R
- /**/ M& i! F) ~4 @, z5 A+ K3 g3 O
- $arr1 = array(7 [. ]) G9 Y& Y$ y: F9 ~
- 'a' => 'okhat',
3 h g$ [0 X/ w$ H( i - 'b' => 'okre',
- }6 ^0 v/ z& V' Q. D( }0 ` - 'c' => 'okarry'
( Z6 H3 `1 Q4 v. M) a- O: T$ k4 T - );
" B) S$ S5 b: } c - */: T* f H! X: `5 j; r- I
复制代码
4 `4 k* G* L# \+ y( ]3 @数组替换的时候,也是处理一维数组的字符串值。。
- ^3 k" |8 u! I% `; Fpreg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php
' {; {( O% g0 [. |6 i. u/ W& _+ h1 ~ - - r4 c" H0 _% R( g1 P. k ?5 Z
- $arr = array(
& f6 z: n1 k/ x1 S6 w$ X - 'a' => 'XXX25012349999XXX',// 不是以1开头4 h# X4 P7 B* H: j2 t9 F) T9 x
- 'b' => 'XXX13188887777XXX',
V! h. `4 [8 X0 Y& M& L" a8 [- N - 'c' => 'XXXX918811113333XXXXX',
$ p1 g N: Y/ r* z/ }- q* P - 'd' => 'XXXX188111133331XXXXX',
8 x) S, S+ y# t! ?5 J, i0 D& T - );
, U# o: h% ]* D& w/ W5 a9 {# Z - [& p, z P0 J" k
- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
/ E+ E3 A; n+ k6 `3 d+ I
0 S( ~# Y8 x2 ? u- S- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
% W: X1 A* U" D/ I - Z$ ~: k+ y+ d. C1 U' E# \
- /**
3 W# q9 m# J4 [$ q( E - Array
5 @2 D( C& A7 V, {) Y: m+ o0 t - (0 ~4 ~; d- d+ z8 V" [
- [a] => XXX25012349999XXX
8 r7 }# \% h9 ?2 f J; U+ I5 `) h - [b] => XXX mobile:13188887777 XXX
; e; F0 H0 R: @) } - [c] => XXXX918811113333XXXXX8 r Z+ j0 L. D& z1 t& v9 x
- [d] => XXXX188111133331XXXXX
) b. K6 Q2 J( j: n; J8 F - )
- j0 `; W2 u$ a+ Y$ f - **/
复制代码
/ c& z1 [. _- ?+ G; j& g/ A! S
. V+ q# p9 l0 u( R) ? D |