strtr() str_replace() substr_replace() preg_replace()
6 o* y! k9 V4 R0 Sstrtr()的用法: - <?php
+ Q8 b {8 f/ U2 W" L - & [* `, V7 \& F- W N1 B8 _+ @
- $str = "test";4 K( [$ Q: o M" ], A9 c+ r
- ( U4 ?0 s, C6 B2 d- c0 F, e$ m0 J0 m
- $str1 = strtr($str, 't', 'z'); // zesz
9 v/ A0 \7 j6 l5 \. Z4 H& J3 ~ - $str2 = strtr($str, 'tt', 'z1');// 1es1
, r1 n0 F! p+ b% }, h% W, L3 { - $str3 = strtr($str, 't', '');// test* W6 e4 O% O& w2 N" q
- $str4 = strtr($str, 'ts', '12');// 1e21
7 }; i6 x! p- y& b B - 4 O* y# w0 n& O5 h$ }
: t& z4 J' v. x* Y1 Y6 Z- $str5 = strtr($str, array("t" => '')); // es1 q, ? O/ I+ K$ ]
- $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
- i2 c$ t5 ^& {( }1 N7 k9 v/ E 有两种传递参数的格式,一种是数组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
% f+ N+ {/ W" K$ R1 u' L6 R3 Bstr_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php( s* D- d s4 N5 e( e) g$ t
- + q* ^: r9 F6 }2 j* q' o+ O
- $str = "test";6 r5 g2 L% g* V+ F' H5 P L5 o
& i7 G3 X9 y) @1 x" U, U1 p- $str1 = str_replace('t', '', $str);// es
% Y( R1 \0 `8 Y2 ?% }4 | - $str2 = str_replace('es', 't', $str);// ttt) F$ \: B9 m6 q! B
! J: n) O7 a0 b6 i- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb' F/ k: A& A# ? I- h7 h7 m5 _
- $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
1 W9 Q6 f) w! y - $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa6 Y1 ~ M+ ?0 ~; u
- $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
- |! V1 ?- x: J; U - ) c; x% k& ^ h } ]5 l
- $arr = array(! G l& D( o8 k
- 'a' => 'testa',5 T2 s& x3 B& K5 X
- 'b' => 'testb',
' C( }* Y* x" [+ V8 X; v: U! @ - 'c' => array(
- y* h. H& s$ K: t; x - 'ca' => 'tes1',/ o) T% f, O% Y5 {" H
- 'cb' => 'tes2',
5 @0 @# R! @/ p) X6 K( X& U" P7 ^; @ - ),5 z9 T7 A! k( \9 B& T+ ?7 ^, o- J
- );
! C- ?# C y& @8 T! B0 \ - 9 V! d4 u! \6 t2 V& N3 e4 a' L
- $arr1 = str_replace('es', 't', $arr);5 ]8 @$ F( v1 G' l
- /**
s5 q" f& B* H' j, e' K - $arr1 = array(
& `- K2 n; p* }0 M2 ]( w6 E - 'a' => 'ttta',
9 T8 F5 x& V2 s - 'b' => 'tttb',# v0 N# z, P* }. g; Z
- 'c' => array(
) n& p! {- E2 l( ]4 S3 ? - 'ca' => 'tes1',( o% N5 g. [" }: Q
- 'cb' => 'tes2',
: A/ `4 {* R5 O! F1 M6 P* q - ),& U+ o. b& y; J
- );
- \" v) b( p0 z# j+ {$ q: T5 Z% q - *
. A6 h0 T: z" y) i5 ~( P - *
& X! d2 O2 ^/ |3 s - */
复制代码 . R: o! l" a N3 \: j& }: v
/ a& ~) p/ V2 ]6 v6 X7 c# f5 x! R0 Y/ _* ]. f
str_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。 4 i. J: c1 s3 S( W
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php
7 R* M5 F1 o: I" _# ]* R+ m# m: Y
: S/ _% V+ z0 f1 N: A/ K- $str = "test";
$ c# [6 S; `6 i, @1 d. _* i - 3 Y b @, T5 W5 m6 n. z* V8 r
- echo substr_replace($str, 'zzz', 1, 2);// tzzzt
" E3 G1 J8 u6 Z8 _
* W+ K% U; t+ i2 \+ S" [! ~2 ?1 T- $arr = array(
1 |" D; j) `) Q1 q - 'a' => 'what',7 i7 ?) L8 l+ E+ a$ a
- 'b' => 'are',
5 @7 o9 h; N5 X0 G, S - 'c' => array(+ x! W( d. f1 ]1 d+ z$ N
- 'ca' => '11',
% O% o" o8 f) h: l/ h, Y - 'cb' => '22',
+ O; _& b$ H# E) ?, J" p$ M) h - ),
; N3 v+ ]. w5 p - );
# [# ~) d0 u' Q4 A9 Q
; @ M/ n6 A K- l& v- $arr1 = substr_replace($arr, 'ok', 0, 1);/ J9 j/ D: c' W8 `) ?2 _/ E5 H5 A
- /**
0 J( M6 {; ~' u* H- B& I) s - $arr1 = array(
' f) R0 F! d( m- v - 'a' => 'okhat',
! Y- j. {8 P6 B/ }( e - 'b' => 'okre'," f+ h6 l- \& o, R- s5 @/ ~
- 'c' => 'okarry'
2 O3 T( F' h/ V - );
$ f( G# R3 i& y5 ]6 E - */
7 P" P) P* j- E5 E
复制代码 & K6 h+ Z+ @) s$ P! q- ~. `6 @& v
数组替换的时候,也是处理一维数组的字符串值。。
7 M) b6 R I \preg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php# N X3 z+ b9 F4 D/ ]; b5 y9 `. e
% n; S2 h; j3 Y" _- $arr = array(" _+ u4 o0 I" r
- 'a' => 'XXX25012349999XXX',// 不是以1开头) |- T8 ]# {7 ~3 {
- 'b' => 'XXX13188887777XXX',
0 b* a6 y( |* O7 ~ - 'c' => 'XXXX918811113333XXXXX',4 Y' j2 i% M4 L1 g
- 'd' => 'XXXX188111133331XXXXX',
! T% i3 R& I8 o) f/ @ - );
. d6 z/ `# Z2 {/ o3 _9 z$ O: P( m - 3 M: m T( t+ Y
- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
# G. | W( E0 D: n* a* _
' {/ \& h4 p$ r! J' K% H5 F' \- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
8 o. q4 g# r: b; j& V1 F3 g& _9 S
0 v3 i6 ?, j @5 b9 n" F- /**) ^3 D, K5 \% I8 \# D) x, `- b
- Array% o/ _( R$ M& m5 \
- (: s3 j. a2 N7 W' Z
- [a] => XXX25012349999XXX
% h+ ~# M. U3 z ^2 H7 M - [b] => XXX mobile:13188887777 XXX9 X7 X8 H* c4 y0 h$ a9 `" o+ l1 N
- [c] => XXXX918811113333XXXXX" o* C) S4 l" Q" D$ q0 j2 b+ Q
- [d] => XXXX188111133331XXXXX
) T5 y- J$ o) j4 N% C - )
$ [( o- F, x$ u6 r4 w9 d# C - **/
复制代码 ' Q$ a$ L" c' h! r2 q
3 ?4 v! F3 b7 u/ x4 j8 q( R2 W |