|
strtr() str_replace() substr_replace() preg_replace() ( B! u" D# Q% |/ d! U* D
strtr()的用法: - <?php1 u9 T$ [4 F0 w
- 4 ~% [7 ^& x) E
- $str = "test";
6 M- f1 s! Q/ @' I) U7 t! F) Z$ j - , u' _2 @# i2 [0 w2 t% W" d& J4 V! C
- $str1 = strtr($str, 't', 'z'); // zesz
% h1 h* n4 e4 e6 T/ k - $str2 = strtr($str, 'tt', 'z1');// 1es1
2 |% L$ F) A- y# ~+ ~% j, g% S! {1 ^) V - $str3 = strtr($str, 't', '');// test: R0 H( s- P5 _- z& D W% a
- $str4 = strtr($str, 'ts', '12');// 1e21
: w' T' P" d5 w7 m* i* r - 2 a G) U4 i; x, q9 g: C# i. Z
- : W ?4 b' s7 d& y- y
- $str5 = strtr($str, array("t" => '')); // es
$ ^8 r. F1 g0 o( R5 h) `0 F6 ] - $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
! M" f5 [9 m/ P: t7 a: I2 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 $ J$ L& H$ n9 ?. M" O1 U
str_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php/ a4 ~* S/ d" t9 z* F
- , b# S. Q: y( F8 G1 c) P) x# v/ o
- $str = "test";" S; b: R. w- d4 M, v4 z9 Z
4 p( Z7 W, N/ u$ c# T4 [8 A2 U! T- $str1 = str_replace('t', '', $str);// es
! X B Q, `/ L, N3 f7 p - $str2 = str_replace('es', 't', $str);// ttt
* Q3 q( \0 X; y1 B - 8 C4 ^3 l' N4 f9 M
- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
0 C- s f! t9 @5 n8 p5 E - $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae9 d" X7 D) K: l- `
- $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
1 G+ e! N0 I# i9 q& Q3 ~! q - $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
# \% F% b! [, R/ h4 \6 \; ^ - , k/ E: d# g% V q" }4 e( R
- $arr = array(0 Q% M# t1 j ~6 l' }7 b! g, D
- 'a' => 'testa',
6 ^0 E$ c) X; G' I) L, ~ - 'b' => 'testb',
$ C% E2 }1 i9 Y6 Z6 w" X! ~ - 'c' => array(1 a5 {' N! r3 r% H' v0 }, w
- 'ca' => 'tes1',
$ N( v2 M3 I' I' ] - 'cb' => 'tes2',
& y- {7 f: E# y9 N% @1 c8 @- i - ),
0 ]/ ?6 G% M- S, d - );
2 ?5 `5 `- Y5 ?" R' p% Q
* J1 [( V$ O7 @" n/ s, M; a+ a. [- $arr1 = str_replace('es', 't', $arr);! G8 z+ f3 m. P% o* d! K& h
- /*** r; Z2 q; k, O/ F0 n! s
- $arr1 = array(
3 }/ a2 D( A" d3 ~! B w - 'a' => 'ttta',7 C/ r! b) R; e
- 'b' => 'tttb',
# ~' t- g8 e/ T' Y; {% F$ y9 R - 'c' => array(
6 y8 [1 r) N+ P' M. q b8 A# g% S" \ - 'ca' => 'tes1',$ _4 l. V6 r6 b7 s; m9 \
- 'cb' => 'tes2',8 L' u6 {1 M; y* g
- ),
; O' s$ k6 }( o4 R! `, ?+ Y y- ^ - );
8 S- b( {9 b) \" B/ P$ c% ] - *6 R+ k) e2 U' D3 Q; v6 |) T) L0 s8 S
- *
+ h+ L- R& w9 \4 v, y" W' l* A - */
复制代码
' X; e( G, g% w3 l2 r$ ?2 K' S
% ?, Y- E; c: l7 Y% M) n
" \' S5 o( d7 P+ C4 _0 Wstr_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
& l* |: e4 M9 J0 a0 l9 [substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php
1 R( W* q9 w6 ` - 5 f9 G2 T; S' w1 i) ^
- $str = "test";5 z" E3 d. n# u
+ S$ x+ U, O1 U& Z8 o- echo substr_replace($str, 'zzz', 1, 2);// tzzzt8 C+ ~7 k: w* ?* X5 p4 g$ _3 |4 m
- Y4 ^! K2 t! T' G# T# r; O& J- $arr = array( [" l4 B* u3 i( E; i, E3 o& Z
- 'a' => 'what',
+ J- N, j2 |3 g) T7 d - 'b' => 'are',
; n/ n9 f# G) ?* h* V- P' j7 u - 'c' => array(
3 [$ F, l! L" h% R - 'ca' => '11',# a, k$ t! [8 e" ?- t
- 'cb' => '22',
1 A9 A! X* D+ y1 X! ]9 r - ),- Q( v) S z7 E- {) P: F$ a
- );$ C% f$ U/ }6 P0 ^4 b& W t
- 4 h: A8 {1 y- K+ O
- $arr1 = substr_replace($arr, 'ok', 0, 1);0 N ~! p2 q& i a
- /**
5 E/ e, S. B |4 D; C - $arr1 = array(* C$ O/ l1 q1 z& T5 w
- 'a' => 'okhat',
5 D/ T8 L9 a' Y' K! Z - 'b' => 'okre',
. u& q5 u9 n. P- l - 'c' => 'okarry'7 i$ z. k( A6 ?# U# I! a9 ]
- );6 h5 ?! U( T6 p# J6 J
- */
% b' {. @$ Z* i) V5 m
复制代码
# T4 R i t- l+ U* {数组替换的时候,也是处理一维数组的字符串值。。
+ k+ J+ ?2 h% L/ E- ~8 h b3 Opreg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php1 p6 Q& p P5 z( z2 _) p$ I0 ?/ B1 L
1 n' H& h2 ?) Z/ w1 C) Y- $arr = array(- P8 y4 X! r2 b$ Q) Q1 {1 i0 a0 ^
- 'a' => 'XXX25012349999XXX',// 不是以1开头& E; J' Z; r+ S- e/ i! ]. X9 `
- 'b' => 'XXX13188887777XXX',
/ h: E ^: P, { - 'c' => 'XXXX918811113333XXXXX',
1 T4 U" R! ^' Y$ } - 'd' => 'XXXX188111133331XXXXX'," G, Q9 d* E, v5 o5 H5 z! `
- );6 g6 Q% d' U. Y4 b8 g; c# j( ?+ d
( Z! V% n/ t) r" G- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
+ {! q. x, N- S9 p5 S0 R/ N
% a3 F5 S" t' j R5 Z" _- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号: Y9 Y1 d7 g$ h) a$ I
- # x8 H0 Y' }/ ] j: h+ c. ^9 z
- /**2 n8 ~" ]7 N ?" H' S o
- Array; B9 R: y- m( |2 |
- (: O4 ?3 H7 Y: H# s6 x; y" p
- [a] => XXX25012349999XXX% Q3 O. b ^* [4 y" @! K) G
- [b] => XXX mobile:13188887777 XXX
# T" Z. h s. g+ X) d! b: N" k - [c] => XXXX918811113333XXXXX
9 x; B5 {; e& r- G9 e7 K - [d] => XXXX188111133331XXXXX
5 P! K3 {( J K - )6 k0 G. I. h; `6 b2 d; ^6 `
- **/
复制代码 3 t9 I, Z3 p. c) l1 [
9 Q! {& ?6 M. h- B0 v" r& P2 T |