strtr() str_replace() substr_replace() preg_replace()
. X+ q9 h. ^7 n+ E0 ustrtr()的用法: - <?php3 @" j: G( O) V8 m/ Y; f) @
- ( l0 b# D; R4 y$ d/ P: i- W
- $str = "test";. ^0 d/ ]3 \9 W6 X7 h3 o
- ; o- q" S# r& g8 J% t9 ]
- $str1 = strtr($str, 't', 'z'); // zesz
9 y) g5 \; Z' L- N( ?* T - $str2 = strtr($str, 'tt', 'z1');// 1es1
. c% b7 m' C) g( A, s - $str3 = strtr($str, 't', '');// test
2 w' T5 K; d0 P: g. c - $str4 = strtr($str, 'ts', '12');// 1e21
5 N: B1 j, D' Y3 E - 2 a" W& W- I- E! z* j) |8 u3 G% S
- # e' f; P& f# L3 _$ j8 _; j7 P
- $str5 = strtr($str, array("t" => '')); // es: E" ?+ R+ h- c# j
- $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码 9 V" i |; }6 ?' X2 r! 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 5 ^& s7 u5 w( }: e3 Y, ~/ P
str_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php+ u% o9 g4 k6 E6 U4 G$ |5 ]
. N8 ^6 A) D% C. \' H+ ~- $str = "test"; [6 a( j) V- w, o8 v
- & [! D0 q7 C) y- {
- $str1 = str_replace('t', '', $str);// es. ?1 [0 _. @' f3 ~) E& }
- $str2 = str_replace('es', 't', $str);// ttt. C; A: x }. W7 s8 E& K
5 I$ d; p4 p9 U4 R, \- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb; l7 {* [9 t4 K4 T
- $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae* w/ Q% D5 C" A% ^8 ?
- $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
' x! _2 P% O2 {% S5 f - $str6 = str_replace(array('t', 's'), 'e', $str);// eeee$ Y" c& C' n) Q/ x
- 8 ?6 O! ~4 P" n% |. y
- $arr = array(
5 w2 Z% o3 ?# N' F! x - 'a' => 'testa',
* L4 @+ P$ J" K4 O& x% N - 'b' => 'testb',7 | d9 ` |! y E- O
- 'c' => array(. p& y4 y- C3 }
- 'ca' => 'tes1',5 g' w3 B) w2 z2 c/ b( X* `
- 'cb' => 'tes2',2 Z$ ^* f# h; R/ B
- ),
- I' o8 |0 |7 O- Z! }3 G1 d0 q - );9 i6 A/ b0 b5 Q J% z
- $ {6 p) K9 I# o$ N; P+ y ^0 `$ A$ a
- $arr1 = str_replace('es', 't', $arr);
& Z6 f- [- D$ R1 J( U: ?$ N - /**2 y( V$ L0 o/ r% X$ W" h' d
- $arr1 = array(5 @$ G, o; } U$ p
- 'a' => 'ttta',0 o, n' E: ]1 J
- 'b' => 'tttb',
' k8 }) J# {% w c$ x; l" L5 } - 'c' => array(
- L4 q0 t0 [2 D" ?$ {: _ - 'ca' => 'tes1',
& p! a ~. l w" F$ \ - 'cb' => 'tes2',7 C) ?- ~5 t- X2 u) i6 V
- ),6 r: C& O R* r" }, F
- );
& j: ?& P" [: H - *
4 F0 R2 [- v$ z" U - *3 v) Q6 |7 @; q7 E. T
- */
复制代码 ) `- A5 ?0 ?9 @8 G" ~
! y8 Y: ]* n# v8 ^
- Z1 j- c5 r, R! R; L6 M5 [str_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。 ( E ]: b+ x, x. K3 D) c
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php
. }* ^# t5 U9 ^
% n3 q! C: Z9 J9 a) E/ P6 j8 W- $str = "test";
5 @3 r; Z% y& Z6 a - : W2 _% n( j7 i- Q/ w
- echo substr_replace($str, 'zzz', 1, 2);// tzzzt9 C* r4 I" c8 s2 J0 L3 \
' Z, `3 U( G3 ]" k4 n" W- $arr = array(
7 I$ P9 C) a( ]( m2 Z1 D - 'a' => 'what',
# B0 V6 ?5 a6 s2 i6 t- I% D - 'b' => 'are',
0 v0 \0 i0 e5 ?7 @" P. V% D! i3 C - 'c' => array() n" \& ]; p9 L
- 'ca' => '11',/ \6 ?( r: b+ A: Y9 l. t O
- 'cb' => '22',
5 V8 F8 j) E+ h8 P4 ` - ),
# b0 e6 |3 _4 s _: c/ k - );
4 C; X' v! `0 O$ i
' Y. X4 {* u2 Z6 j- $arr1 = substr_replace($arr, 'ok', 0, 1);3 w6 \+ ~- i$ i( X P
- /**! V( e' P$ m8 d U
- $arr1 = array(, v8 F( Y7 E. c j; F9 }
- 'a' => 'okhat',& ?" y& R# z, [3 c. k
- 'b' => 'okre',
+ Y* B( Z- p6 ` I - 'c' => 'okarry') G6 ^5 M! r# G3 P+ v$ m' l& A0 {- b
- );
* w! y" D _$ n - */; @1 ~# D# G: y. x
复制代码 ' G+ k. L2 M3 @3 X9 W* W
数组替换的时候,也是处理一维数组的字符串值。。
" h, @" Z/ D8 ^ O1 @( |! bpreg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php
V; E; A5 S H
( o. \" b; h0 y! U. @- $arr = array(7 n. n4 q+ J8 x5 p4 i8 U
- 'a' => 'XXX25012349999XXX',// 不是以1开头
4 M! o! q2 w: A$ _, u# W$ c+ B. O/ P - 'b' => 'XXX13188887777XXX',
3 K# W- q) I. n; f7 X0 U9 y4 S4 d - 'c' => 'XXXX918811113333XXXXX',
& ^( x. ?7 ^# K! \ - 'd' => 'XXXX188111133331XXXXX',
3 v4 \4 L) x7 c0 P - );, l4 P3 s( t/ c* B C
- ( d0 h1 q: u' Q, C- x9 e) g
- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
2 U p2 W6 S1 V' V2 W+ @ _& N - 4 K2 z: C" y/ p' |& ?
- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
- [8 R+ X4 Q0 t( G; A& p1 y
. P! w( ^1 d3 c4 l- /**& \) @: E& ?& O
- Array$ n0 }/ Q# [8 N' O5 I2 k- r i7 Y* ~
- (
% M% x& I5 V, R* o: M - [a] => XXX25012349999XXX
) I2 p2 m0 }6 x1 y2 @ - [b] => XXX mobile:13188887777 XXX
- h' y Q( ^# m' o% a4 t4 G - [c] => XXXX918811113333XXXXX; z$ I. S2 S6 e) x t$ T% l
- [d] => XXXX188111133331XXXXX
! E, J- V& a: o% x( l- ]0 C - )
" \5 D# B* A2 G( f1 Q - **/
复制代码
% \) \5 w1 V- d* T0 m/ i9 w
- F' ~0 W, D2 d+ V: N9 @ |