strtr() str_replace() substr_replace() preg_replace() 9 U* u+ B( s' [8 I
strtr()的用法: - <?php+ c5 {7 Q& D: P, o3 `# f) r
- 3 i% T4 D: l+ r9 |8 ~
- $str = "test";
4 E3 J3 ^2 }, Z - ' ^; m" _6 L" ^5 w
- $str1 = strtr($str, 't', 'z'); // zesz0 L$ i7 ]! O2 L
- $str2 = strtr($str, 'tt', 'z1');// 1es1
/ Y5 a" P, ^. W/ ~# R& | - $str3 = strtr($str, 't', '');// test. Y3 }. B |- y/ N3 r! W( H
- $str4 = strtr($str, 'ts', '12');// 1e217 T1 o4 ?# o( o- k. ^; U- M
: o P# q3 |3 }' z g" p% O- ! W6 b9 s9 i' A ?$ `
- $str5 = strtr($str, array("t" => '')); // es. x0 U9 g* }" I8 a) l+ i
- $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
* `5 \9 x j) b# t0 s3 a* a 有两种传递参数的格式,一种是数组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
9 c" f! ^, U" k5 H+ l6 y3 A+ ]str_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php3 w7 M: t- N+ E- N; W
! V3 r4 Y+ k. n1 ^8 C' z9 H4 B3 \- $str = "test";& @+ o) ]( h1 H* X
- * S$ b v8 ]; ?. E
- $str1 = str_replace('t', '', $str);// es
+ C) Q k3 L) s: q - $str2 = str_replace('es', 't', $str);// ttt6 Y2 M+ Z4 ?- T+ g" e- p7 q
: Z5 M1 _9 B T/ z) t/ E- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
9 ^/ C' s) J4 h: Y1 L - $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae1 F8 ~' X- h4 d; C) l( u
- $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa r2 `: y- O* h0 g7 H
- $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
5 n+ Q; V1 h5 m @, S - - _5 W% G2 ]( _7 {
- $arr = array(2 \2 y; y& o, E
- 'a' => 'testa',
9 p# c4 b& }4 n* F% \# R - 'b' => 'testb',
) k9 ~( i+ O: ?* N0 N: } - 'c' => array(
% V' O; b: i% I8 A - 'ca' => 'tes1',6 o2 z1 A) I B5 d' t
- 'cb' => 'tes2',# P! t* s! q4 k0 U! A0 n: i/ {1 H
- ),3 W2 q& w$ _0 E. Z5 c
- );" E( l. W& g+ X
2 b, V+ M, L1 ^% l% @/ U- $arr1 = str_replace('es', 't', $arr);
# Z* s0 M, t, w2 c. | - /**% N, J4 i- S2 `3 S3 o
- $arr1 = array(
$ X# c! r% l r5 f2 R - 'a' => 'ttta',
$ w; S& i. D5 {- k+ A( d" X0 ] - 'b' => 'tttb'," Z6 K9 l" ^; p, B: B1 c# y
- 'c' => array(
" U" l' Y* X- [# h) y3 b - 'ca' => 'tes1',
# y" | G6 J0 X; `$ k! `) U; v - 'cb' => 'tes2',
( X3 A/ L# |7 l/ R; q$ Y; z# ? - ),
; A( w) V% d* r$ r0 s: u - );% \3 X; s/ K( O4 N) G' D
- */ b6 p5 @. @2 }8 a2 {' k5 L: y
- *
. {0 d8 U' q. R# ]5 o3 X - */
复制代码
& g! K7 \. j& ?, |. @- l3 e5 i f
7 ?* _" y/ x" a: G) I7 {% Kstr_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
/ s* s5 ^7 E: J# e5 A8 b/ [substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php1 G* l2 r; k& F; P- H A# J
- 1 T N' w5 ]; F8 \1 B- I
- $str = "test";
$ ]1 S5 e0 P4 q0 q - ' Z4 {# V* p3 |& n; `3 M
- echo substr_replace($str, 'zzz', 1, 2);// tzzzt
" [. q& `1 @/ l# |5 L, L3 F* r - 0 ~6 B4 _% H) V; z7 P L/ J
- $arr = array(
& p C/ H3 ?9 c) o - 'a' => 'what',
- I& @+ ~! w% k* K) [ - 'b' => 'are',* C$ D- y; @' |) E; [2 T" F
- 'c' => array(1 ]5 e3 R! L( e& z# f% Q3 x4 ]
- 'ca' => '11',
+ l/ E5 O3 _8 r+ Q e: F - 'cb' => '22',
" f# j8 b, m: O- P' M. E7 | - ),% Q/ C9 V" c' e" M& N, N
- );
# H5 [6 L5 ]% C8 v0 O- u& O9 @
+ p) \, Q6 m5 W, ]- $arr1 = substr_replace($arr, 'ok', 0, 1);3 [& i' R* _2 ?. B4 i' a( A4 D
- /**
9 t* Z: I$ f( O - $arr1 = array(0 K5 x J- h# U& @5 ?2 q
- 'a' => 'okhat',
: ^1 g; X4 n/ l/ h' u: K6 z& Y - 'b' => 'okre',4 l6 D3 {6 w# F6 k6 |! I
- 'c' => 'okarry'
) a( k& S% Q8 [) ~( D _: S - ); S# e f3 f1 A {7 L
- */
1 c. W9 C8 Z0 `4 p8 y) q0 |0 g
复制代码
9 h1 _9 O8 L `1 i+ f8 j6 U数组替换的时候,也是处理一维数组的字符串值。。 - q2 l1 t( y; ]( A2 M
preg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php% h; T0 `& R6 ~' f+ X& D
- / u8 N& V- T+ i/ ^9 V E
- $arr = array(
, y7 r/ `. Q/ K! N/ _) D - 'a' => 'XXX25012349999XXX',// 不是以1开头* A; ^$ j1 c/ a2 Y
- 'b' => 'XXX13188887777XXX',. M; f. u4 [7 c; j
- 'c' => 'XXXX918811113333XXXXX',; N! {; o: p, J' I7 ?) P! F
- 'd' => 'XXXX188111133331XXXXX',
: o& Z8 R1 s8 ?/ q# I$ z - );
5 s0 k7 [: y5 q- t - . ]' j. k$ P: n5 Z& R. ^2 d8 ^; o
- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3( u3 {1 }6 u# s3 s w9 L
, L( k- X* o5 J7 r- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
( w6 V; e z u/ {
2 q8 r n/ D, q' ?- /**! i& _; ^, D! V3 f: T
- Array2 K$ g: @; N4 N) E# ~* W
- (
8 A( g6 I: v" }( y; m - [a] => XXX25012349999XXX/ c& s8 b6 z" F: I8 | S
- [b] => XXX mobile:13188887777 XXX* o7 g* @0 F1 y
- [c] => XXXX918811113333XXXXX
0 O' J8 l( ?# @# W - [d] => XXXX188111133331XXXXX
% g. Q: U' K* S6 T- ]7 q - )( h0 ^& o2 n1 _
- **/
复制代码 % F/ ~% g4 [; a% S# Q1 [' c4 P8 g
1 E* J" G7 {7 _! b; X; ~2 i
|