|
strtr() str_replace() substr_replace() preg_replace()
5 j/ `0 Q: }* m1 x0 m1 `' z, u7 Lstrtr()的用法: - <?php( }9 j; z( X' \; j. {# }& c
/ b1 J. @" U4 z3 w! D- $str = "test";
4 w! K: B1 q# g7 s5 a/ \( ~ - # t9 J4 g' m/ J! C2 s* g
- $str1 = strtr($str, 't', 'z'); // zesz
/ ]) }/ {9 [' J! R0 a - $str2 = strtr($str, 'tt', 'z1');// 1es1# c# ~9 s, H% I
- $str3 = strtr($str, 't', '');// test
1 d0 T! F4 \, B' s/ { - $str4 = strtr($str, 'ts', '12');// 1e21/ S0 |/ D, L, @
, k) n, d- N! L# o+ s2 t/ q- * q* _6 ~! e2 I- W0 S' ~5 e. m) ?
- $str5 = strtr($str, array("t" => '')); // es
/ |( J1 v5 f# y1 _# z - $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
; j( Z+ S- w* i* E; E. [0 W+ L 有两种传递参数的格式,一种是数组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
: V# O7 [# ?* j9 g$ Qstr_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php7 s+ V5 z" ]+ x6 P) i# u$ }) |* s
- 5 a- c; \8 K7 g8 D1 _9 p& f
- $str = "test";7 N" `) M9 a. C2 ?5 c! {! N5 p
- % V; Y8 h+ |3 K
- $str1 = str_replace('t', '', $str);// es& K3 Z/ [0 a$ B) m) L7 ]/ t
- $str2 = str_replace('es', 't', $str);// ttt" O1 }& i! {: c5 u: R
- 4 R r6 T: p& z& T' O6 {
- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb$ \# u. R) n! H$ E, T4 V5 M
- $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
; u# N5 S5 D% ^* V5 J- [& q - $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
3 @1 P; a3 @$ v% a5 v" B, j - $str6 = str_replace(array('t', 's'), 'e', $str);// eeee) K# } h! o" p' @
0 ~$ G/ M" O+ C4 I0 ~. ~- $arr = array(
" X3 }. X8 U6 q/ f2 @; K - 'a' => 'testa'," ?: j( c7 p. C! |
- 'b' => 'testb',( N+ |1 J5 q+ T$ b7 a
- 'c' => array(2 r. s7 q- M- l6 r8 W( ?
- 'ca' => 'tes1',
% I( h: }3 _8 E. }0 f; A' c - 'cb' => 'tes2',
6 @0 M& _2 z4 ` - ),
) R! A' `# n2 [5 I0 R/ f) y' e c. Q( c* ] - );% Z0 P9 Q6 p! e- w; I
; c& p# F3 I- R2 z" t0 [- A- $arr1 = str_replace('es', 't', $arr);
. C# _+ N* _0 _- T9 h4 x4 _+ t - /**
# c) z( ^& `9 V' ?$ p8 D( U - $arr1 = array(5 K; \: B! h* O- `5 {+ @, A% j
- 'a' => 'ttta',
/ v+ U. f. j- W, d9 q - 'b' => 'tttb',
) l+ l; ~8 j( ?3 l8 Y - 'c' => array(6 D- y4 d, y6 V& V/ s6 m0 x( V
- 'ca' => 'tes1',
* m- m3 i+ H, T# N$ ^* R - 'cb' => 'tes2',. o2 e) A+ q7 m( s$ F+ l
- )," s ~- D" K2 n7 M5 L8 _
- );
( j9 u; T) F) e* h! J" ~ - *& K$ U$ g; R4 z+ D
- *
4 F% _2 ` N) S$ o; Q+ |$ ~, R5 g, F - */
复制代码 . U T) ?+ e( H, s
* j i& ^0 M& w5 J' o0 S
0 ?% Y3 e+ T: O; z
str_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
8 R4 b, M$ |5 ^3 t1 X5 Zsubstr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php
- ]0 w; A% j0 O6 R. }
) P8 w+ G) Z. m- $str = "test";
$ |" z1 M2 _* V; q/ x8 Q) V - 5 l3 s% _4 o# M8 u
- echo substr_replace($str, 'zzz', 1, 2);// tzzzt
0 {) k2 `' ?( e/ L - / \# x1 v4 u4 c1 \1 }" z/ z
- $arr = array(
5 T E2 z" u/ P. y1 j$ Y0 A - 'a' => 'what',# j# U$ N. U1 V: R+ M, o: P
- 'b' => 'are',( W$ L4 ~( n; O, b1 h$ ~
- 'c' => array(# R n1 J, s+ F
- 'ca' => '11',1 P. H8 H. I: S( X$ K Y0 I# f
- 'cb' => '22',
1 C9 q( p3 a/ R3 m' k - ),) b6 }. o# \! [: f% k
- );
7 B0 |% `( P* e7 }* p5 G
/ m" x& Y" a% j) ~# H. d- M+ W- $arr1 = substr_replace($arr, 'ok', 0, 1);
# s$ A M2 f0 R/ a- c9 w! ] - /**
- w+ u* W1 A( L+ \ - $arr1 = array(
! L' |" ?, Z' r D' R: ] - 'a' => 'okhat',
! W5 \+ B7 U8 T8 e( N( U- q - 'b' => 'okre',
+ |$ Z) Y6 c, f, a - 'c' => 'okarry'
7 @7 u& |. z7 v0 b8 L& P - );
1 z! l1 l0 v& F6 a8 [, ] - */3 Y$ X, ^1 E' S* D5 x
复制代码 3 G/ ?1 @/ Z8 r+ ]5 V
数组替换的时候,也是处理一维数组的字符串值。。 - e% _ Z5 k; p9 v8 Q9 ]$ {
preg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php
b' x8 c. s; y/ T* L0 i z
5 o8 D2 [& D( N1 s9 r- Y$ o. ~( a- $arr = array(( m; @# C: ~, [$ l* } s
- 'a' => 'XXX25012349999XXX',// 不是以1开头
2 W! Y8 K- K7 d( E3 J3 x - 'b' => 'XXX13188887777XXX',
; e8 v" V& |6 p3 C: D8 y1 g* Y - 'c' => 'XXXX918811113333XXXXX',+ R4 e9 F+ D0 p5 Q3 i% E
- 'd' => 'XXXX188111133331XXXXX',
" e6 Y$ C* f; n - );
H& m+ f% q; I' g4 o - # Y2 a2 I. \ D/ j
- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$39 g. W4 k9 W% I! t! c, {
- # n3 @" d C# R1 G0 C
- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号, d7 {* g1 b4 r4 A$ e8 e2 O
8 ~/ ~* ?7 }% V& u C$ x) b- /**$ [# j( ]# z! T* T9 J( r
- Array- j% [; l& t5 B7 M& h% e7 I
- (0 ^/ L5 X1 @' h( g5 P
- [a] => XXX25012349999XXX
+ U( p) g+ g4 d$ h# d, f/ [9 Q( p - [b] => XXX mobile:13188887777 XXX
) Y+ |+ ~' D& V h- T - [c] => XXXX918811113333XXXXX
) E. b1 `' J( {! R - [d] => XXXX188111133331XXXXX
, {. S. C2 A" {! n* s - )
. a0 D7 r, ]" d+ N - **/
复制代码
' ?7 J* i3 _% _" w7 h" v( W: M2 _3 y" a) z6 C# ^; U. j% @& `3 d
|