strtr() str_replace() substr_replace() preg_replace() # G: g4 s. F# [ K" G1 K2 t- j+ p
strtr()的用法: - <?php
: u4 p& s$ B! s/ n# K. a2 g) H
( k( ^; k6 G5 u3 T- $str = "test";! t2 ~( b" l# ^7 V5 o
5 E+ i4 C( H0 _" X- i2 _: U/ i. s- $str1 = strtr($str, 't', 'z'); // zesz
3 h# \ w* H J% O+ J - $str2 = strtr($str, 'tt', 'z1');// 1es19 t* ]9 p: s8 a1 S1 f- ]
- $str3 = strtr($str, 't', '');// test
* q. A! S3 j. J. u8 x - $str4 = strtr($str, 'ts', '12');// 1e21
* v- x& c) R% W- |) |: C
# P d& P# A# G7 l2 e% k- ! s- ^: ~: ~9 r1 F) O
- $str5 = strtr($str, array("t" => '')); // es
6 g* I: v2 U, e, t5 T/ j* ] - $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码 1 [: I& u% @5 I) [
有两种传递参数的格式,一种是数组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 - o5 G, F* S% N; {0 {- y2 k* M
str_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php
" Q- Z- L B2 b& R; | h" y" d) H
6 ~7 y% P9 D$ y& f( {+ w" ]- $str = "test";, x6 {& d' J! P! _
- $ h. s a$ e2 u( q; n% W
- $str1 = str_replace('t', '', $str);// es
) E) x" \( ~) i- I& y6 B - $str2 = str_replace('es', 't', $str);// ttt
; w! S; e3 b7 B6 U1 r - 9 [* B+ k5 v0 M' Z4 F z( M
- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb8 m; X, D; S% u7 ]4 D* R
- $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae: w: w9 X( R# `& Z- m9 f7 o
- $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
' T" [6 g, S" x) S* G - $str6 = str_replace(array('t', 's'), 'e', $str);// eeee! i& O! h$ g4 g6 U! _, K
5 P6 c6 }' g2 l7 g$ b" j( }- $arr = array(
* r5 f9 ?' V+ v f3 p+ h - 'a' => 'testa',
5 O% P; o2 G/ G - 'b' => 'testb',
) ^ P- S2 S$ p, {7 g% t - 'c' => array(! g4 t4 o2 w2 ^; j8 `0 x' f
- 'ca' => 'tes1',6 H1 d) A$ i/ i4 J0 Y/ u
- 'cb' => 'tes2',
+ Y }0 f. P2 x% b6 \ - ),
$ r/ N) H; G6 r. x/ p. o - );, T! U e9 ~& b/ v" ^
: V5 F+ O. D/ T: n8 T- $arr1 = str_replace('es', 't', $arr);$ ]5 X( G" H; W7 W" k1 D7 s
- /**( E9 p" I1 {7 L% X+ w
- $arr1 = array(& O! T; n% G" T' b
- 'a' => 'ttta',' m% p! \1 G/ P! c" T1 S
- 'b' => 'tttb',
p+ W2 ?) v, D$ {/ Y - 'c' => array(
8 y% [* o( k/ V: K+ S9 s0 D3 u - 'ca' => 'tes1',) Q. R' q8 U+ z1 P$ E1 k; k# w
- 'cb' => 'tes2',
' @2 x f" O, z. k/ c$ I. V$ ] - ),
# J. O F( S- L# ^2 k; A! { - );
: H U, o! s7 Y) x. E0 R - *
. l3 k0 t. C! h! E8 x, b - *
& A1 z$ W0 ^! @# P& k - */
复制代码 / H; Q6 L9 s/ e- q2 D) O, ]
. j3 Z2 s6 x p0 c4 j
# K- y h8 {3 fstr_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
/ v7 x8 E5 d6 k- S$ i4 hsubstr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php
" ~9 Q& f) p! a. { c - * F# m" v9 T3 i5 N9 y3 v
- $str = "test";6 d+ v" p6 N$ O I' j
- ?+ z; E- W3 q( S2 I
- echo substr_replace($str, 'zzz', 1, 2);// tzzzt4 M* g4 v3 e7 [$ r. S- x
, t1 l7 m+ }! G& |- $arr = array(
* W+ X* i O2 M% a, a. Q - 'a' => 'what',$ ?2 b2 o: ]8 m) B
- 'b' => 'are',: Y& \1 T; o% I$ D* t
- 'c' => array(
% \( N: x, c( J% }, N% n7 \: f - 'ca' => '11'," ] L) y: L* n- `0 m+ D
- 'cb' => '22',: k: q; I& X2 r% Q) x
- ),
" h: B+ ~1 Z @* o5 i! M9 s7 Z - );! I8 X( d& t+ C; c) v
- 0 O* J' ?# l; M( ^7 H) [8 V
- $arr1 = substr_replace($arr, 'ok', 0, 1);( m9 d: w- N; u( d8 _$ U Q: [2 I
- /**
6 S2 H. w2 D' G8 ]7 j3 X% C- q - $arr1 = array(
) ^5 w" {; t2 ] - 'a' => 'okhat',1 z) S0 k1 K' b: J) S4 u
- 'b' => 'okre',
' V; K7 P/ U" ~% K5 I - 'c' => 'okarry'+ o3 Q G0 V* m1 Y8 }
- );
' q) n* X4 I5 S' M2 _( V - */
1 K4 v! l1 {) w9 S7 O3 N5 I: A
复制代码
1 m# O) P& b& S5 Y+ \( a: }- F$ i) d数组替换的时候,也是处理一维数组的字符串值。。
9 q; @6 r/ E& E Z; n" Ppreg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php5 [+ p# n+ Q1 O- m/ j+ Q
- 8 Z% n% `4 z8 r2 {0 y
- $arr = array(
2 x- o0 G/ U$ A - 'a' => 'XXX25012349999XXX',// 不是以1开头
o9 Z" p4 G( T2 Z4 _3 z - 'b' => 'XXX13188887777XXX',) W- {+ X5 l1 W, O5 O* Z K1 R
- 'c' => 'XXXX918811113333XXXXX',0 A# E2 `( ~" o: c4 m6 W' a& n2 t
- 'd' => 'XXXX188111133331XXXXX',9 V% W3 N; ~6 |* K* m, U
- );* N* j: x) b; [( O8 K& Z
- : A+ I& E- M1 l+ ^9 M3 L
- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
- d8 H1 ~1 f# y# q; x; N - 3 a. Y- }) y* V( H& u0 _. X. e
- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
* {$ ~9 A- h0 x - . f2 ^: E3 L/ t4 i$ a' q
- /**
5 ]0 e% z0 N& X: d C+ t - Array
& a I. `3 j) ^! S+ |, R0 P9 Y - (
) n6 N) q; ]; E) C, y; Q% M - [a] => XXX25012349999XXX
6 E N* D7 O& j% f- W, q, }5 ? - [b] => XXX mobile:13188887777 XXX) O- v4 `9 [9 N3 D8 J1 @
- [c] => XXXX918811113333XXXXX1 Q2 H" S W1 ^! Q0 ]- x; I
- [d] => XXXX188111133331XXXXX1 B* o. c0 T* A. Q# h3 _+ @6 e, O
- )5 k- ?1 D. Z! s! n1 b
- **/
复制代码 V& e# H \7 K0 T5 I
6 K- u9 I2 f) Y% u. \0 n |