|
strtr() str_replace() substr_replace() preg_replace() * {8 z8 j) M: q9 h7 Q
strtr()的用法: - <?php
| Z) H5 p8 J( x- y) ]# P
' L& _# w6 t3 q- f3 H, P# G- $str = "test";: T2 z" }- s, U2 `5 e$ c I
: i: ~2 m: P2 Q" g9 o6 T& A- $str1 = strtr($str, 't', 'z'); // zesz3 q% X9 Q9 b4 X
- $str2 = strtr($str, 'tt', 'z1');// 1es1
" j/ C( n' c2 W# e - $str3 = strtr($str, 't', '');// test
6 m$ w. i, S, p+ d1 d4 N - $str4 = strtr($str, 'ts', '12');// 1e21
9 f& o7 |4 Z' W6 c - 8 G( |; j" s" K; m* `" n
- 9 C( J# m0 I8 B7 u
- $str5 = strtr($str, array("t" => '')); // es8 l% h7 ^9 c9 ^* d% a8 b) }
- $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
1 P4 X3 p' y8 \ O9 S 有两种传递参数的格式,一种是数组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 + P9 P/ D, g5 S3 B
str_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php# I x; r J* y. @1 e! D
- 2 i' K' W6 A- d7 w6 w4 ]) X
- $str = "test";- r2 N) u5 u2 n' S
- f- a! x% N- s" C7 K- $str1 = str_replace('t', '', $str);// es2 w8 w+ u$ `' q% }0 X) e+ h
- $str2 = str_replace('es', 't', $str);// ttt
& z9 C2 S6 Y8 h# K' t& I9 u
) G! k/ f" R3 x0 }6 e( B! L- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
. l' F6 u# q5 l& s - $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
8 C' ]) _3 T% R( n8 u3 u4 R - $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa6 b. O6 O( `- U$ G$ V
- $str6 = str_replace(array('t', 's'), 'e', $str);// eeee' Q( G& m2 N3 S
& B! t4 q) F7 m+ x1 k w- $arr = array(, m) y4 c( ~+ ]# b* z9 o; B
- 'a' => 'testa',
# n6 y8 G+ K9 U& C - 'b' => 'testb',7 X' X2 {, U3 o& u: d( C
- 'c' => array(
1 }1 b( }1 S" j% E- t; x - 'ca' => 'tes1',. c0 f/ X3 p$ U! r
- 'cb' => 'tes2',
" p' x3 e$ M" O+ t O - ),
/ y# h: K/ n+ F' ], n; D - );0 ^( J w! L( K9 E
3 I& @7 t W4 \' x- $arr1 = str_replace('es', 't', $arr);
1 u6 p2 X" @: w; t/ ]6 b - /**' P; q& ^# ~2 @" D
- $arr1 = array(
2 I: v. ^4 B/ l9 {4 c. ? - 'a' => 'ttta',
0 K# X0 [3 A c - 'b' => 'tttb',9 u/ v Y. t8 b' N8 t C
- 'c' => array(# d P: t' H9 P/ P/ F& c
- 'ca' => 'tes1',
0 w0 q# B; A7 C% s. H - 'cb' => 'tes2',
, a( t! Y5 A# M5 z. p - ),
( a" U( [) M2 g( q9 s- K! u - );
+ d* `0 q3 B/ o- f1 _/ J - *
: p' I) a% G& j - *
9 J4 r+ ~7 u& i5 B# Y" p - */
复制代码 % B1 G6 L. h$ d$ m" ^4 E3 t3 l& E$ w
% W; ]3 f+ y+ _2 _, P h' x& s8 _7 B1 c+ @: ~( U
str_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。 . h; b9 F! @9 D. g* w
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php
4 z6 B( a0 x4 C# v, X - ]: F% g( o" e* G. F2 L+ b' r7 l
- $str = "test";
. C2 Y5 j0 Z! V" r0 k
4 I4 b; D |6 c5 O- echo substr_replace($str, 'zzz', 1, 2);// tzzzt
2 y6 J, B7 `. o( W# y, j( b! g
* d0 t0 @' ~$ P# w- $arr = array(0 G. m: Q* n( H5 E1 F2 H0 X* w; Z
- 'a' => 'what',
. H& Q+ m$ Y9 a+ w _( H/ R& j- U- X - 'b' => 'are',: f8 j$ W4 K& Y1 v, t7 _
- 'c' => array(9 E; ^% O: _: S
- 'ca' => '11',
6 |, v' z+ p/ b6 u9 T - 'cb' => '22',. k( L+ G" d. _) g j
- ),9 ?+ V" `; a4 Z& `1 R9 R
- );
: B1 Y$ R8 V6 Y, I
% M: X% ~+ l& x7 ~/ p) E c% F; a3 t- w- $arr1 = substr_replace($arr, 'ok', 0, 1);
: t/ L! |& G0 H/ _ - /**
! M$ Y7 a% \7 n9 h) v- [ - $arr1 = array(9 H, r8 ^# O8 G) K
- 'a' => 'okhat',
1 ^1 ` T0 J5 @) ~3 v& }) O - 'b' => 'okre',
: @1 I" F" Q/ I2 U& ]3 O - 'c' => 'okarry'
, V% g8 b& Q( E7 |, R0 x1 W - );
& K. T. e9 v: E H* j - */
- s! W( z" `; Y/ i
复制代码
3 J9 }2 ~9 e( p' a4 r数组替换的时候,也是处理一维数组的字符串值。。 - n0 E% f2 I/ q/ J1 u4 c0 q! t
preg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php; ]. m. P/ b3 R- Z
G2 W9 T* w+ ]# Q8 q! D- $arr = array(8 H4 x% c: \! y$ T) [- o- a0 F
- 'a' => 'XXX25012349999XXX',// 不是以1开头
4 }5 y; N- w) l" w# {9 ? - 'b' => 'XXX13188887777XXX',- A; [: C. h7 O
- 'c' => 'XXXX918811113333XXXXX',; H5 N# I& a$ f' s1 K. z
- 'd' => 'XXXX188111133331XXXXX',
- U; b/ }) u, y! G1 n! u0 ^7 m - );
( J2 M2 o0 s Z8 d3 O
* b1 C: [3 M, m5 u. V! ^* g- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
7 Y! ?; I; S* G. p
- S- U% ^/ `5 j- u5 _7 c' [ F- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号6 m- c: Z" ]3 A# F
- + b2 c* T+ W* ?0 y! O# u5 \
- /**0 D6 l) L0 |5 g- a7 o W9 z
- Array
; ~; U+ n6 I) Z I* K7 ?6 U# p - (
9 e. g6 f0 J2 A' r - [a] => XXX25012349999XXX5 b. r: K& S8 G3 c% u# m
- [b] => XXX mobile:13188887777 XXX
! J' P" @0 L/ f; L. \" B3 d6 d& r - [c] => XXXX918811113333XXXXX
- [; b# v& w- d+ E, B1 o: ~* `+ t - [d] => XXXX188111133331XXXXX
. v% x5 H( g5 q+ S; f - )
, ^6 a4 w& C7 _- Y5 X( d1 ^ - **/
复制代码 " N. I/ s6 x. O
2 f. X1 j" ^8 `4 u7 t; n% y
|