|
strtr() str_replace() substr_replace() preg_replace()
/ F+ m, }2 v( G7 F# H/ n# ~; M1 estrtr()的用法: - <?php
2 Y* b* w" G* U9 f - / k3 q8 N' A$ |( w
- $str = "test";% m9 c6 w* A0 ]
- ) s# K; @- }9 d3 P( m- X
- $str1 = strtr($str, 't', 'z'); // zesz
* [2 g5 t1 m1 ^$ W - $str2 = strtr($str, 'tt', 'z1');// 1es1' h' \; |! z* Q
- $str3 = strtr($str, 't', '');// test, _, o; z$ n) P8 K
- $str4 = strtr($str, 'ts', '12');// 1e21 K9 x# b/ y0 x8 q0 J! W
- 6 n- L! e ]* w0 G8 d. l; E/ f
2 q1 m; j; @4 w% ]- $str5 = strtr($str, array("t" => '')); // es9 d0 x7 q G/ c8 ?" s
- $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
8 G6 y) d) D& ^" N 有两种传递参数的格式,一种是数组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
: k3 a( E6 y+ u5 ^7 M8 l) N$ c% g8 cstr_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php
1 d# ]0 L; _' k5 V2 [
# T; r9 g) @2 p% h, o- $str = "test";
, @" m4 v$ f! k+ ?
- @' U8 U. w( p2 [! d7 G- $str1 = str_replace('t', '', $str);// es
; G5 @7 S: H/ {# N+ L: @9 v - $str2 = str_replace('es', 't', $str);// ttt
6 z c& p3 y, ~8 W2 \: P. }
& H7 \: ^9 d# F+ P/ ^- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
% X! V" G* x7 o1 H, L - $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
# r* E1 |. y: Z7 |4 k, |+ X - $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
, p/ k5 R/ Y/ z- R+ K" E- E5 L# W - $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
* k B0 F2 L2 V% Q- q
9 g( A) {- ?7 o: W5 T- $arr = array(3 l: i* h5 ^. J1 {, D7 ^) q- Z) b" c4 V
- 'a' => 'testa',
0 M& j9 E: d6 e - 'b' => 'testb',! q9 I9 d# }' R- f& v6 E7 R
- 'c' => array($ E# U/ C( Z5 d
- 'ca' => 'tes1',/ {( l7 @6 k% t
- 'cb' => 'tes2',2 G7 g" N; s0 }1 t9 o/ ]
- ),$ `3 i7 A, v: {& x1 K+ J5 [
- );
# E" v# ^8 P% L$ k/ h - 5 {* V8 G. ^- ~- W
- $arr1 = str_replace('es', 't', $arr);' v V: H, z4 `$ Y$ [
- /**# X8 d# J" t4 X+ G" o9 |5 Z X! A
- $arr1 = array(
- J. Y9 j O( `$ z) x" A+ K - 'a' => 'ttta',; d7 k6 i( f; j0 w- C1 E" B+ V7 N
- 'b' => 'tttb',
: f1 Z2 {* C4 M6 z6 F - 'c' => array(
8 U, J ~2 D- X6 v2 G! L. W - 'ca' => 'tes1',3 T2 z0 G$ c8 n- T# m% m3 I
- 'cb' => 'tes2',+ C& R, p2 X7 f* L
- ), f d5 |1 C8 ^; D/ |
- );
" s/ d4 Y" o' n K7 a" K$ \0 |0 A* p - *" ^% E8 x- E- K+ L5 n2 {! Y+ {& f8 c
- *2 `& N& e" m! k) h; g: V
- */
复制代码
9 _/ V* C! N6 m% Z2 z
/ A4 X% j9 u) [ R' |1 f
/ O% q% @, }" h! p6 S4 M0 z" gstr_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。 ) a( g9 j* O2 P* ^$ u
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php
B1 g" t& _- v) x/ d* b% k1 s - 8 d, o$ E( c, ^. Y2 X2 K. `+ C, F; j; f
- $str = "test";* J4 S* D3 z6 h
- 2 G2 q# j$ u" `8 R5 [9 \1 q2 E
- echo substr_replace($str, 'zzz', 1, 2);// tzzzt
# y. B |9 E- B8 Z9 t# d - ( ?4 p/ \) v6 B. U4 k9 y
- $arr = array(! `/ l1 c6 |$ H( p5 R( W
- 'a' => 'what',
! B @( R p6 F - 'b' => 'are',
# V' `* k# n8 c$ P - 'c' => array(% J/ _2 N0 _5 z
- 'ca' => '11',3 o. T3 A, I2 ^: J# u
- 'cb' => '22',
* K+ z3 ]* D7 }- `2 L k - ),
( U/ |9 C/ V0 d+ d& ^, b x2 V% r - );
7 j. c0 F! q" b8 W. E% p3 G - 5 k" j" Z' O* I$ U- Z$ G- @
- $arr1 = substr_replace($arr, 'ok', 0, 1);
1 u% f, o; V& q t( e - /*** k! P- I2 W4 k; ~9 j9 F; a, ], L
- $arr1 = array(' x, J2 a- Z; s6 i8 R5 w1 {, D
- 'a' => 'okhat',' ?7 t3 v0 a% H3 I0 P% r- ^
- 'b' => 'okre',# x6 @, S; E9 V+ X6 h
- 'c' => 'okarry'+ T$ |2 c F6 f l2 ]/ S
- );9 x6 C9 h8 a7 }5 M8 ^/ ~
- */
3 R C9 ~- }- D, [- T
复制代码
" x' ~* R. x5 D+ P数组替换的时候,也是处理一维数组的字符串值。。
# G g: o# A9 ]% C6 zpreg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php
7 ?% X8 }6 U4 ~* y( u& R - " e- ]& b4 h$ O4 p+ |1 @
- $arr = array(5 A- Q" @( ~. s
- 'a' => 'XXX25012349999XXX',// 不是以1开头
4 T1 V; \, w7 H* G- v - 'b' => 'XXX13188887777XXX',
: K" `" V1 M# u - 'c' => 'XXXX918811113333XXXXX',/ |* d. |5 M) I
- 'd' => 'XXXX188111133331XXXXX',
B$ n8 c1 ~/ X - );# r1 T; L' T+ ^* A) y1 a5 w
- ' N* r6 ?3 O" k
- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3# G; B1 T3 y) ~, u- v- Z/ `
- $ q4 W! T2 ~8 a. y6 d& Y
- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
7 C1 u: e4 z8 B/ Y& j - & b% ~: Z3 }8 X% y9 }( Y
- /**
0 \' ?7 y7 m! i8 l) f - Array
$ [6 E! K% }8 K* y a6 z - (
7 W+ s3 v) P1 a/ r: x/ ` - [a] => XXX25012349999XXX
- `% v1 o" W r - [b] => XXX mobile:13188887777 XXX
: K" I% y1 X$ X7 J. Q8 r - [c] => XXXX918811113333XXXXX7 Q$ h+ d) q, u9 N1 y- F( z! y
- [d] => XXXX188111133331XXXXX
' o- \# G6 [, Y& f* a f - )
" N5 k* N) H/ w$ | - **/
复制代码 / |6 ?6 R( v6 M' R3 H5 j* Y
4 S) }& t' e1 a- ~' A' G& c3 w |