strtr() str_replace() substr_replace() preg_replace() 6 t/ Z+ h6 Z; s9 Y) @; I+ C
strtr()的用法: - <?php+ K0 \& ~8 f/ \5 j
- , E' j; I/ q6 b R+ k# s. T2 }
- $str = "test";* M* v( G. q% O3 x7 S# |
4 n" D6 [9 C9 I. d- $str1 = strtr($str, 't', 'z'); // zesz
9 Q9 U2 d: y5 W7 ` - $str2 = strtr($str, 'tt', 'z1');// 1es1' F k9 w* u u) v8 e l! ]
- $str3 = strtr($str, 't', '');// test
`* n/ u/ ~& K8 d" N1 }; q3 ]% I - $str4 = strtr($str, 'ts', '12');// 1e21, I: M/ @8 t, r. j2 d
. ]% Z$ [1 ~9 ^* ?1 A% _3 q
' y6 T* |" w% J8 P' l1 e) F) J- $str5 = strtr($str, array("t" => '')); // es
& h5 S: `" d! x- N# X- w. w7 m - $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码 & `8 H7 Y2 W* t5 J/ x
有两种传递参数的格式,一种是数组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
$ u! f0 X6 Z1 \str_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php3 G7 b* c2 ^1 [1 h& M
- " a7 U7 F! d/ r8 r9 n9 U
- $str = "test";9 H' ~0 u' e) u# \! z3 P2 _: x
% L s) c9 S+ ^/ n; j; o0 N- $str1 = str_replace('t', '', $str);// es( v7 {6 f9 B% g q9 y# s
- $str2 = str_replace('es', 't', $str);// ttt
( _0 q6 N0 n0 K. H9 I* {4 y - $ J( q: A/ \9 Z; V3 c1 ~
- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb! K# k- Z. O8 x; K6 U$ E
- $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae4 ~+ W. k8 M3 X/ j0 W
- $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
+ C4 g j1 t. s8 a0 Q5 w% _1 R - $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
$ x& [& r% Z5 |! e( G2 x" q - ; G" }9 s& f" A9 s% ^. D+ F7 z
- $arr = array(- R8 M% e4 E3 a2 i8 h0 d! ]
- 'a' => 'testa',
; g# M4 O5 _# u - 'b' => 'testb',
4 N& ]" Z7 W8 u: v+ h+ [ - 'c' => array(
3 h9 j$ \" O+ ?% t& M- l - 'ca' => 'tes1',& Z: f% Z1 c0 E( C- Y2 r5 K3 _
- 'cb' => 'tes2',
9 e6 X7 V0 C8 O9 c - ),
% d2 |7 w4 w9 t: t1 }5 F - );
3 a& x. t3 N' k7 H2 _ - : N/ e& M$ f. m& i: z
- $arr1 = str_replace('es', 't', $arr);9 G' U+ g! a* a# ~$ @! G" ~+ I; g
- /**
T. R5 B5 ~% M! F+ h/ Q. \ - $arr1 = array(' B+ J5 \1 a3 J# m6 E* K
- 'a' => 'ttta',7 @$ g6 y6 d$ I
- 'b' => 'tttb',$ s# N6 X% L2 @8 ]3 f4 x
- 'c' => array(
8 p! b0 V' u) J - 'ca' => 'tes1',9 t' s' l: f) N
- 'cb' => 'tes2',
5 A8 e" a( x8 A. N# N: ~ - ),: c" t$ f7 ^! W2 _
- );- ]5 r: z9 V. f
- *
* c1 u/ D6 _7 S4 u# S. ~ - *+ p+ W7 i+ u) m$ a$ j; i5 Q1 G
- */
复制代码
* `' K: y. ^" R& t7 [" `" h* K
* M7 n' M6 b1 a+ K' I1 R# l
' `6 \* B& D7 {5 {8 ~str_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
$ R+ c# c9 n t- I2 }substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php( [+ R C7 |* f3 e9 k0 s" E0 ^% }
- + A1 c2 K4 I8 a" k+ P& W2 @
- $str = "test";
0 ^- g+ D8 o# D
5 W: z3 ~* F5 s, L o/ H9 g* x- echo substr_replace($str, 'zzz', 1, 2);// tzzzt D- I: i( X) H* p( Z+ i
5 k, u1 s4 |6 J; k- $arr = array(9 c" i: Z$ t! f6 t- L; g
- 'a' => 'what',
$ F5 T( H4 t0 ` - 'b' => 'are',0 g( {4 S- v" s8 c
- 'c' => array(0 Z( S0 e: C( g* s
- 'ca' => '11',8 ~) v) V2 p) S I
- 'cb' => '22',
9 |8 J1 l1 Z4 P! v! P1 X! W - ),
, V. a/ A3 u2 L$ U4 j* T5 b - );
2 S* t1 m# I r! V9 a0 [ - + R+ ~% L4 V4 r. t
- $arr1 = substr_replace($arr, 'ok', 0, 1);
4 {5 b0 f1 Y1 c) S) s: [" U - /**/ t' ?% P3 m- J, T
- $arr1 = array(
; k" y2 O! x2 V# l - 'a' => 'okhat',
( J2 N1 K/ T8 }- q7 B - 'b' => 'okre'," [8 T8 R. g+ k% v2 o) Y
- 'c' => 'okarry'
% @8 S; M! K! Q* U2 @! X/ J - );& P; z6 J: O% n3 a
- */
, u2 \* ~: U# I3 N0 w; V7 ] m
复制代码
3 F/ K" F& d9 J# I数组替换的时候,也是处理一维数组的字符串值。。
7 Q. C% J7 A! gpreg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php
* C* g# ^1 \8 U' j( z4 @" e, o' F - 2 A0 n& ~/ g' V2 h, @, y; c
- $arr = array(, P) q1 Z! {5 q# r
- 'a' => 'XXX25012349999XXX',// 不是以1开头
* a% i; k7 Q% G ^2 @% @/ Y b - 'b' => 'XXX13188887777XXX',* b9 m+ @8 o, n5 N, b- ?' r
- 'c' => 'XXXX918811113333XXXXX',
; R" ^: b1 P+ i# |1 K7 v: w0 u' W - 'd' => 'XXXX188111133331XXXXX',
2 ~4 z+ D J! _/ e, Z( v - );. D. I( p) Q- m
7 d& ~" J# k& U# U \! a( P- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
# v+ U( ~5 @. Q
7 W2 e1 F; ?" n/ v- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号) v& f7 g0 p7 P; K' K! v) R! s& n
% g! b+ H l& h( l! z- B- /**" j; F# p- r+ j% A% g
- Array/ f) p9 f4 k) ?% o3 o' R
- (& G- D# ]4 R$ b
- [a] => XXX25012349999XXX6 ]6 `- r+ I" F% z% E/ t
- [b] => XXX mobile:13188887777 XXX% B; m( n# k. k6 e9 k
- [c] => XXXX918811113333XXXXX
% }2 [& [ S x - [d] => XXXX188111133331XXXXX
% j0 D3 \" X( o/ ], [ - )$ R! H, C# ~- j/ J) u+ }8 v! T* d
- **/
复制代码 ! r& {5 q' D8 V1 p% T* L; ^" `
& G; n6 m# F0 h2 h- W1 a, M! Q
|