|
strtr() str_replace() substr_replace() preg_replace()
2 }, t% O, g& b8 |5 Kstrtr()的用法: - <?php
5 K8 {% U5 t3 t% r' |3 `8 Y
5 r4 k4 ]$ u, N9 _, N- $str = "test";
- ~5 n7 S* w& G5 i3 ~6 ~# D
, V, Y) V" p; R# j- $str1 = strtr($str, 't', 'z'); // zesz
4 s9 u$ @/ @; t: T - $str2 = strtr($str, 'tt', 'z1');// 1es1
" c/ D7 }( i' n# p - $str3 = strtr($str, 't', '');// test
5 n) i) _; @1 \/ t" N' [ - $str4 = strtr($str, 'ts', '12');// 1e21
8 Z0 m( W! J$ e% z2 B
1 w" i& \3 a" W( \/ x0 u5 i( U
3 Z$ @3 x6 g3 G( _2 J- $str5 = strtr($str, array("t" => '')); // es3 n, q) Z' G% Y' W( m1 o& |
- $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
9 W4 ~5 W. d; }* O 有两种传递参数的格式,一种是数组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 : n, v( J6 d# s' ]6 t I' L4 d
str_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php# C# Z6 O7 Y5 ^! [: |- Z- M2 I
$ \0 m4 r# L; M* g3 Y9 k I0 C- $str = "test";6 {1 k) l$ ~% J5 c0 Y) Z' b) s
- 0 F, a6 X" k- l- @% j/ r s& `; z
- $str1 = str_replace('t', '', $str);// es
+ y0 z( G1 \" H( t$ h8 t - $str2 = str_replace('es', 't', $str);// ttt
% U) j1 P0 W' r) K! ?2 b - , }7 G6 p. Z: V# x# f$ u
- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb5 x& \( }6 V- i" `
- $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae% ]1 q; K* S* s" x2 N1 r9 |) g
- $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa* m) \: z0 `5 Z) A2 w
- $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
2 a0 K% E# @3 d/ @0 u- N" M - 2 n) t+ I$ ~/ x& M' P
- $arr = array(
U8 [$ t! f' @5 q. s0 H5 j - 'a' => 'testa',
2 r* p# E0 G* k+ H8 A - 'b' => 'testb',
1 l* A( v+ j6 t$ n - 'c' => array(
% F4 n: g; d5 i& p - 'ca' => 'tes1',
# ~6 r. g+ I" ]$ @ F. o - 'cb' => 'tes2',
' l9 L* k! x7 f. K" i6 T - ),& L9 g$ `3 r( G; E+ r5 _+ T4 N
- );
+ y: ~2 d; Q; n) M& ]5 t) B - 8 m7 t u1 f9 e9 r
- $arr1 = str_replace('es', 't', $arr);
7 o0 j; s) M" z% G3 D - /**
0 A5 P/ _9 I5 f4 Q5 s# g' Z' ` - $arr1 = array(
/ l, _3 ~0 ^8 c/ w1 R - 'a' => 'ttta',
5 h, J6 T' a& Z R) E& P - 'b' => 'tttb',
' y. Z5 H. r8 Y1 b - 'c' => array(! k- ~: H4 `$ h0 n7 R
- 'ca' => 'tes1',9 }6 [: p: i4 o$ L+ T
- 'cb' => 'tes2',
3 b" l; a E. H: \: e' `& } - ),2 g W: J* _# ?7 i" H6 n/ S1 U
- );
$ @- Y" m0 V" f, Q8 n+ O - *3 Q- W0 r* r) b3 x# r- z
- *7 ]9 S: k1 L y# r: U
- */
复制代码
4 H" W1 x: E2 M K: A% w2 ^3 z5 L) [% Y7 x
5 ~+ g1 f. p) H; h
str_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
' d- f4 k$ |9 b% z% ~( tsubstr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php* ?6 [, p0 I: o7 I- H7 M( ^3 C: i
7 X6 t) b9 _& ~0 g6 n1 P A# @- $str = "test";5 M" p6 Z/ K3 ]- E; M0 A
- 1 V C7 X! p+ t
- echo substr_replace($str, 'zzz', 1, 2);// tzzzt* E* Q5 ~0 D6 F6 I: i: ^
% {: g$ ~- J- Q9 W6 {, A% j- $arr = array(
) T+ W& W/ G$ _5 w3 ?$ G - 'a' => 'what',
/ k% n( J( S8 }3 \ p7 h - 'b' => 'are',
0 W" l; T' x8 F. \: U - 'c' => array($ [* {; v; {1 F
- 'ca' => '11',- i) V3 m9 K% x! a/ B |
- 'cb' => '22',3 K! N/ |5 v" [
- ),
5 V0 F3 z% k' R) W - );9 f! ^4 u( s! @
9 i9 P) _( h! M9 d' o- $arr1 = substr_replace($arr, 'ok', 0, 1);: W8 {5 r4 y' v/ y- Z
- /**7 R# Q: W: I* `$ c
- $arr1 = array(6 }- y& N7 M8 c+ T( }
- 'a' => 'okhat',9 Q. ]. v# R( g7 B& y# S$ u, E
- 'b' => 'okre',, y, V; k* }# ?; O+ C/ ]" U" g! \
- 'c' => 'okarry'5 f# e; o% V+ q& I5 E2 P* U
- );7 b% ^. T$ P: E
- */' ?3 G% _# B/ x& W) U; A; L
复制代码 @; p( K3 |6 U: B$ i4 ]
数组替换的时候,也是处理一维数组的字符串值。。 - n/ M3 v" H9 ~* I! `: h& P$ N
preg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php4 }8 l5 c- d& l/ _ D
& g* g/ E7 n8 _" e0 b- $arr = array(6 O0 W% `7 {9 _, l
- 'a' => 'XXX25012349999XXX',// 不是以1开头
0 l/ r5 j. l! w2 D - 'b' => 'XXX13188887777XXX',
+ x' C" s/ @, F2 E - 'c' => 'XXXX918811113333XXXXX',
P" T2 ~5 e6 z: f9 a7 ^( ^9 ~9 X - 'd' => 'XXXX188111133331XXXXX',
. z b8 k$ [* s7 O; ]) | - );
3 L2 \1 ~, o7 T. X2 B K+ u4 Y
2 `" v, b0 a# y8 _2 I f- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3; X! ?; f! Q/ _5 R+ a: R9 U
- 4 p$ j% L- b" ]: K/ @5 ^) v' Z
- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
/ T9 I; {$ i6 n! J* s( q1 ]$ V: T1 k5 @
/ X7 ?: n- [+ K: B) i- /**
; {4 F- ?) K# w" b( C$ m - Array
% i3 w3 F1 b* i# g" y - (
% a- i3 P' T2 y% X - [a] => XXX25012349999XXX
2 N& N/ p8 M1 t8 i$ k - [b] => XXX mobile:13188887777 XXX
5 S, l# ^; N- s* ~5 ~4 k% H( Z: M - [c] => XXXX918811113333XXXXX
& H: G: }9 q$ H, s0 k - [d] => XXXX188111133331XXXXX
, W8 A% p- \- N1 x) @4 [1 ^ - )
1 z! N7 N# O- i/ h" C+ e! O% u7 A - **/
复制代码
& ^9 M! H/ G5 k- \0 ], j
/ H x& G g6 I$ C, g( d% r- s" m |