strtr() str_replace() substr_replace() preg_replace() $ X9 t5 n" K, @0 ]' I% C+ P
strtr()的用法: - <?php
$ Y" R( C8 x5 P8 i3 M - - D, {' m, L% Z" V
- $str = "test";& z" d+ l' i+ v6 s9 h
- : S N" R5 k3 z \6 t+ n
- $str1 = strtr($str, 't', 'z'); // zesz
7 ]0 {' t# A/ T, `( q- O - $str2 = strtr($str, 'tt', 'z1');// 1es14 e+ A7 y( Z/ E1 }( s: o+ u
- $str3 = strtr($str, 't', '');// test
9 L- G% ] j) a8 W+ J: f - $str4 = strtr($str, 'ts', '12');// 1e21
, w' ?5 [1 H5 W, r7 x
+ ~1 B0 n$ Y, G! ~' h; j( w
8 M3 C, n3 o+ t1 W! A; h6 H n- $str5 = strtr($str, array("t" => '')); // es% C# s1 q6 D. f+ a4 j2 H6 b) I r
- $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
a( G# p8 t+ F3 P" P `' c 有两种传递参数的格式,一种是数组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 / T' K) s. W0 F7 U6 P8 y; ~
str_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php
X( C+ c6 O% P% l) a! H - 1 ?: ?+ H, o {: U$ ^) ]0 @
- $str = "test";
1 q. ]! ]& k4 K! y" `2 c$ m1 w$ H - 6 A/ v. u% `/ F# a
- $str1 = str_replace('t', '', $str);// es
3 F; y6 n- ]- k: A, W7 y4 t - $str2 = str_replace('es', 't', $str);// ttt+ C; i8 [: c' c* o
+ d& N; i1 d6 I: F- g; e0 I- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
+ l) y# l8 D+ u C8 L( c9 I - $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae( n, ?6 l+ Q% ]) f; G8 Q/ n% \
- $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa) W% \) H. a) w
- $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
- ]9 `3 c+ t- u+ v( a
" l2 z3 i. p, n n9 i- $arr = array(6 \( M( j& R! [" s) u3 Q) k( p
- 'a' => 'testa',
9 J) S" D/ e* o) Q, D" q/ N - 'b' => 'testb',. G1 t9 ^& M% M* T
- 'c' => array( q+ f% ]- t0 ?8 K2 `! c& Q( b
- 'ca' => 'tes1',
1 o0 T4 Q0 w6 ?! y! p N2 L$ r - 'cb' => 'tes2',$ q9 a* A2 l4 ~, \/ ]
- ),
9 w* _: O% e; ]4 x5 d1 O6 E - );' V+ s& ?, Z; f$ \; N
1 K: {3 |3 E |% N- $arr1 = str_replace('es', 't', $arr);
# C% m% H$ u' P. F) {' a) d - /**
1 i3 }! S0 F# }, M3 M2 s7 p2 l - $arr1 = array(
5 X- x. m2 W2 P* R, U - 'a' => 'ttta',' }' s- z1 v8 L1 M& T
- 'b' => 'tttb',
* F p; L9 @* E$ Z# c: C - 'c' => array(
( V. j- u+ Y, ~. ?6 U8 K - 'ca' => 'tes1',
2 ?! J4 L. Z) |4 _* J3 X2 ` - 'cb' => 'tes2',# K4 Z; V/ V3 F; x9 E0 g$ G
- )," v% K2 Q% g- A* X: D& c
- );8 I+ T! f9 ?* f+ v9 l
- *
' a8 B% u* b* Y* @& P - *; o0 R+ ~2 B2 d% J$ |! q* {
- */
复制代码
) C R5 O. u* W* t/ i/ d- Q% ]! ?8 Z: f$ z/ r3 m/ L
0 V7 t9 I+ m0 b, w. ^% u: X7 Y N7 zstr_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。 8 x5 z8 }/ K) T1 S% |8 }
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php
M# d+ X+ V" t: t5 b4 h6 }, p - 6 p& ~+ K2 A* Q! k1 z& o7 S& U
- $str = "test";. v. j* u0 S1 x8 }* S. J
0 |) n) J) }& @0 L. P5 s- echo substr_replace($str, 'zzz', 1, 2);// tzzzt
3 A" r; Q$ Q: A, K
3 H6 E' X6 E1 a- $arr = array(
^$ W, l, r" F - 'a' => 'what',
4 [( f; k0 X9 D' p( p9 g* Z - 'b' => 'are',
. U. T$ g/ |0 c& {! P1 z% t - 'c' => array(
3 Z; u8 J6 j$ c) u$ d - 'ca' => '11',
1 v- L6 Y+ j: p9 l+ k# A: A3 F - 'cb' => '22',
/ f p& J" C- i( o* Z/ n - ),. [6 L$ `9 r% l: d# }' R! [# W! R) y
- );
# O J& j0 i% U- s' C6 R2 ] - 3 W n# E1 P2 q3 J' O
- $arr1 = substr_replace($arr, 'ok', 0, 1);
I' } Q ?5 N. f - /**
* S7 {* \2 W* k" C' U3 z8 P - $arr1 = array(5 f2 d! M' ^" ?( k V# S0 u/ b
- 'a' => 'okhat',) f8 p9 k7 ?) D! @
- 'b' => 'okre',. c& n2 F9 Y9 G e+ B
- 'c' => 'okarry'
& H' p ?# }( g5 o9 z& w y - );; e& e: ~( A: m e* p, i/ X
- *// g9 q7 h, e! |1 e! i7 R6 s
复制代码
# H: E$ U0 Q5 G. m f& ^. ?8 ^数组替换的时候,也是处理一维数组的字符串值。。 3 B7 z! y6 I/ r" C
preg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php
' g4 j7 O* T. C9 q/ q, C3 {+ l9 n( y# g
, u% l6 a/ v# ?' S9 |/ H- $arr = array(
' M. V8 E1 B7 x1 t8 }9 B6 ? - 'a' => 'XXX25012349999XXX',// 不是以1开头* v- H" P# m) Z1 C; Y
- 'b' => 'XXX13188887777XXX',
- m7 V+ C' M, i4 R - 'c' => 'XXXX918811113333XXXXX',
& V# d' |% a ~) K1 R - 'd' => 'XXXX188111133331XXXXX',
+ q3 M E" G/ C3 F; e4 T - );
# e; C: O: `. m# |* I7 l5 N$ w& m - % e$ e. p6 z. ]) E
- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3 }9 v2 X4 Q& I) h8 e. l0 r
- ) u2 N) h- ~/ O/ @4 C! v2 o9 i
- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号* l* m9 \: a# J& C% ~
* F/ y$ X3 W/ D7 W; t' K% z# W- /**! o7 `5 J! I' Y s
- Array2 n T4 h" Y- ^* _! E
- (
9 f) k, p$ F. @; h' n - [a] => XXX25012349999XXX
' d7 C. ]6 p- H( M - [b] => XXX mobile:13188887777 XXX/ }! w/ a, |% V/ v& s0 [
- [c] => XXXX918811113333XXXXX
. W1 X, V5 h% D" T# D5 ?+ f/ U - [d] => XXXX188111133331XXXXX; e; ?8 t0 R6 t8 s \* J u
- )
" ~: Z* E# o7 G- U3 X - **/
复制代码 - G/ P+ n. e1 K. E" k! u
) o' R( f: I0 w, D |