|
strtr() str_replace() substr_replace() preg_replace()
# K* u b9 P/ n3 ~2 istrtr()的用法: - <?php/ Z" g$ S' p9 L1 t( b' a
0 y2 R; g; v) `7 h. w m: P" s- $str = "test";+ ^' G" D6 B' `! n! R
4 i$ b" Z& F. N% c# W- \9 a; V; H- $str1 = strtr($str, 't', 'z'); // zesz) v9 `2 y2 n( u5 d
- $str2 = strtr($str, 'tt', 'z1');// 1es1
7 D r2 H% o% ^- u2 A - $str3 = strtr($str, 't', '');// test
6 b! d7 y- E3 V4 m, r - $str4 = strtr($str, 'ts', '12');// 1e21
7 F3 a2 ?( V/ e Z% C. z" s$ q
& Z" k2 _- x1 b* s3 M
3 X6 ^4 A v+ w# t- $str5 = strtr($str, array("t" => '')); // es6 h* M/ S% T0 K
- $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
- ^3 k% X! A7 f6 Y5 q; X0 q 有两种传递参数的格式,一种是数组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 , c% m* l* g* L% J
str_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php3 M- M, s, F r5 f
- 4 X x' q# Y' p. r6 N. A- ]# z
- $str = "test";4 @, S( O: @6 d
1 g V3 y1 n8 t7 v O1 T* }- $str1 = str_replace('t', '', $str);// es
7 X" c {6 Q* L* b - $str2 = str_replace('es', 't', $str);// ttt* N- x; d/ r; a3 M! i' K. v
3 S( b- V9 N4 P% D) C- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb& I7 z3 E& a( D
- $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae5 d6 E; T% Y+ d: b. a
- $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
9 v* o6 y$ L4 ~6 z - $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
$ X$ `2 \8 _! S) Q% _
$ }$ T- `1 }5 m: [, a& d2 O) r- $arr = array(
5 z9 \6 [/ F/ O. w) L1 ^* n - 'a' => 'testa',
+ q" i( [( Q/ e. d* ?) j7 ]( m - 'b' => 'testb', U7 B$ F* l- O/ [; c
- 'c' => array(7 i& \, j7 ~+ J* p$ N7 Z( h: X
- 'ca' => 'tes1',$ j8 C% r; n0 L9 k" J# l, B% ~
- 'cb' => 'tes2',
0 ^$ h O) l9 X9 |. H8 z, A3 a - ),& }- z3 I0 x5 X# f5 q! d" S) }
- );( ^" E% @3 [: @& Z1 _
- 7 c2 z/ {5 x$ W
- $arr1 = str_replace('es', 't', $arr);
, R% ^9 F$ C$ m& l2 b - /**0 q& I: K8 T. ?! K
- $arr1 = array(
5 ~" K' Z r1 H: ^: v - 'a' => 'ttta',% ^" [8 d" N0 `9 z. `' l
- 'b' => 'tttb',9 U) w5 i; q0 A& ~
- 'c' => array(
& ^7 J+ ^# {2 B8 L4 e5 n& c( c - 'ca' => 'tes1',
* D- T6 Z/ {5 G; m - 'cb' => 'tes2',/ L7 a$ ^, S- N: I. @& X6 I
- ),
& C; K( P. @# O' K; O/ { - );. ^/ o2 d# p i" x. q# H; n8 l# N
- *& T: A8 Z7 ]" [/ }4 U; J: p1 L
- */ g+ v u3 ]# g7 Z
- */
复制代码 1 j/ m. r2 [* U5 ]
3 O* F8 G% c! M8 {1 Z/ k6 s7 E z1 `8 d5 ^9 G* [2 L! l- H' _
str_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。 # o/ z5 J2 x' ~; z. _) P! r5 H5 r
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php
& y7 ~3 _3 R# @5 O5 Z8 M - 0 c; [: }: |: e
- $str = "test";' W# D+ |7 F8 l' D4 }' a1 j- v
- ! y# l6 G9 A7 y
- echo substr_replace($str, 'zzz', 1, 2);// tzzzt
* m9 w1 i8 h7 d0 C8 j
$ V+ h q; o0 y% ?5 B* s) P( K/ r- $arr = array(
5 u1 S+ ~ \) V/ j0 Z - 'a' => 'what',% W$ }5 q3 j0 v3 k9 c/ n
- 'b' => 'are',
5 M1 f- z4 W" K" A4 V$ {' c/ r - 'c' => array(
: o- H. H2 X T% |/ a - 'ca' => '11',* n1 l& u& ~: d+ c7 r3 G
- 'cb' => '22',
' M* F, u/ v0 I0 `8 B5 B2 M h - ),2 S k) R! m& M3 r; `/ c! C
- );
# Y: U" r2 V: O- P
6 N, h8 i# q3 J- $arr1 = substr_replace($arr, 'ok', 0, 1);. R! u5 l1 n' b1 O4 w, u7 v
- /*** x5 @3 h5 ^0 s: l( z( z' ]
- $arr1 = array(
2 \5 m( S& y c- l( |7 C$ x - 'a' => 'okhat',2 z* ]' s2 {3 c
- 'b' => 'okre',- Z% J- C1 y, g+ d7 i. V& I g$ X7 T
- 'c' => 'okarry'
. Y6 g' R" H3 e - );2 o$ @- ]* H( y8 Y; C* y+ I5 b. [
- */( T4 Y; M7 q# N( _- A/ x
复制代码
v8 o' }3 x& f' A, ]$ Y数组替换的时候,也是处理一维数组的字符串值。。 + f, V& E; e! E Z7 R& w
preg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php* k( S) X" k. ] T' a {
- 2 {1 i6 q* e3 k6 O9 T& M7 c- y
- $arr = array(0 [% G! e. t) N/ G
- 'a' => 'XXX25012349999XXX',// 不是以1开头
5 W4 l% j5 R4 k/ |; z# f$ x/ K - 'b' => 'XXX13188887777XXX',
5 e% [1 p) z+ _+ A) J; N - 'c' => 'XXXX918811113333XXXXX',. u. R& M# G" o4 u4 z1 v# p
- 'd' => 'XXXX188111133331XXXXX',
) l; o# t4 e$ { - );
# m4 k1 B) E& V6 d6 }5 v. e/ a
; y% Q0 X' `7 `: q- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3) C3 m/ Z3 L( s9 ?7 W
- , r+ O$ q5 @( V4 q' V0 q
- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号0 K# B+ U+ h" w+ q! R5 ?0 }2 `+ V& I
- $ u# Z. x' O/ C! v/ P$ _5 x6 _
- /**
) ^2 v; x0 ]. E$ p - Array* s, `; u g5 G3 a7 g) s- t" C4 o
- (
- @- u G9 X" x( z+ \5 ~. C8 R - [a] => XXX25012349999XXX1 t1 H, y6 n; e5 u
- [b] => XXX mobile:13188887777 XXX9 X, x( f) r$ L1 Z, d/ M
- [c] => XXXX918811113333XXXXX" R2 X# I, Q. y$ ~ s1 W- o" j: m
- [d] => XXXX188111133331XXXXX5 R1 u* a5 d( O/ o+ w$ V# a
- )0 X) k1 L, N/ k, R3 R
- **/
复制代码
- i' k' [6 }$ u+ J! P% @7 `" h
2 o6 K$ w! S4 `; G, z3 }5 W2 c$ U: g0 X |