strtr() str_replace() substr_replace() preg_replace()
& i, a7 q. R1 g& M" Ostrtr()的用法: - <?php: Q: ?8 E, B3 v0 G
- ' W8 _5 D' ]* t# T! y! G$ ]. t0 P
- $str = "test";+ e: E$ d4 s1 H9 |, n+ }
. |! {" Q5 o7 j, I* e7 u }- $str1 = strtr($str, 't', 'z'); // zesz
, K0 Z1 z, U4 Z - $str2 = strtr($str, 'tt', 'z1');// 1es1
& `' ^! m/ n5 z" L! e4 L) P - $str3 = strtr($str, 't', '');// test
% b, [; ^6 k W3 F - $str4 = strtr($str, 'ts', '12');// 1e219 i3 x# N7 G5 I$ U2 X
- 0 F' `- A% T) k4 v3 E2 W3 r
# V/ K( g8 n) b0 I0 o- n- $str5 = strtr($str, array("t" => '')); // es: x3 K) `5 t% T; t
- $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
6 @: g4 @% m a( h* b) Y* b* o 有两种传递参数的格式,一种是数组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
; y; ?0 ^! K1 J4 w: D8 `str_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php
4 O& A+ G, L7 r - 7 z& Z0 j# g+ B f
- $str = "test"; M1 G( A' P* s/ f; Q4 W& X7 p
- ' X2 H- b4 F; m. `/ j! w
- $str1 = str_replace('t', '', $str);// es @3 f+ T- I* b8 m7 x
- $str2 = str_replace('es', 't', $str);// ttt
% T9 T2 k2 T: S6 {9 f6 |
0 i0 Q0 v9 L, C7 Y, d- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
% T. Y' @2 c. U' j- C z - $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
9 i5 Z; H2 R/ j6 W( I - $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa [" i2 O& F. W
- $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
- J1 G' D+ G: C: ~' o
) m0 n8 _; I- B6 O1 R6 t" g- $arr = array(
9 ^& B* }. \3 z# g - 'a' => 'testa',0 Z, J# P. G: Q9 P4 s
- 'b' => 'testb',
4 A6 ^ g5 z6 w: O( w9 h) } - 'c' => array(
, A) |: A0 L P7 ^, C$ \- D3 C0 Z - 'ca' => 'tes1',' s4 Z; }9 A/ u# B. Z7 G* c
- 'cb' => 'tes2',
) F9 `+ C* _$ v/ }8 n* r - ),
! E+ W0 O# i' d8 L0 N- ^ - );) Y; o. x; \& Y9 A
- 9 c. l% d! z" ~1 C' ^2 P
- $arr1 = str_replace('es', 't', $arr);
' T$ o1 C4 [. n& ~ - /**
! N6 ]- x ]0 z8 @( m - $arr1 = array(. m2 n8 y( D' W: L' t% n
- 'a' => 'ttta',( j6 m! o) H# b2 O
- 'b' => 'tttb',
Y8 }/ f- G3 M - 'c' => array(- |6 f* ~" `$ V9 h: _4 f$ V+ V1 s
- 'ca' => 'tes1',
! x* H) r4 _3 \/ i: r, N. B M - 'cb' => 'tes2',
, [9 e& F5 c" A - ),% ^ ]8 [, ?2 j+ F" W$ N
- );
6 s- Y7 [8 h- H C; F/ h - *1 s' `8 r1 q! _) B) U1 J- y c
- *
8 U$ v& W9 T/ L+ v - */
复制代码 2 Q' Q" L& N+ b6 C, [ R T
- O6 z+ J# D4 N4 J
5 Z6 z, m! w1 F# U# I M
str_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
4 X9 x+ c' U7 @' j6 @substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php
' P9 i- Q" d9 L3 C! ~* K - . m. R5 H5 a2 T8 h; D) ]- }
- $str = "test";# X) o; Z( m- f- s) R
- 2 u+ E0 ?- P5 s" J( e5 d
- echo substr_replace($str, 'zzz', 1, 2);// tzzzt
# o4 i+ n9 q( j - ( [+ Z. H2 L, t# i P
- $arr = array(
/ |+ R3 a. e Q1 b/ p1 k* G - 'a' => 'what',
" H1 T+ `4 I2 T( c - 'b' => 'are',
; A, m( G v2 E5 ]+ } - 'c' => array(
* ^8 [' J1 u, v - 'ca' => '11',
# d. z! ~$ F( {. F+ y - 'cb' => '22',( R' |8 _7 T+ `
- ),
# u6 ]; n7 d2 U# U1 j - );
, x' w/ w0 d! E! v: [0 _
& x0 ]# ^, e3 }# O0 `- $arr1 = substr_replace($arr, 'ok', 0, 1);6 d! B9 t3 t( w
- /**) t6 a$ W- u4 W' y. y1 F( j% s
- $arr1 = array(
" A4 Q: a ~# s - 'a' => 'okhat', ]8 o; h: q! [+ X
- 'b' => 'okre',& R# o: }' h: X- K2 ~) s+ B/ W
- 'c' => 'okarry'
7 G) j. l; j( A8 ]& x - );' a& }2 s! w, X/ \. n' U' r5 O
- */
2 R; j, N" u- h! C/ z S/ n# L5 c
复制代码
, q6 l. ?- ~0 x+ y# _8 F数组替换的时候,也是处理一维数组的字符串值。。 6 j" ?7 N: H+ U F( U
preg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php
( R: A! Q9 r( ]5 N9 e
3 U) Z0 _7 ~3 q2 D2 q- $arr = array(/ _$ X( S7 w# |8 F
- 'a' => 'XXX25012349999XXX',// 不是以1开头, b% @ d* {! K" L
- 'b' => 'XXX13188887777XXX',% e E7 {! B' j3 N
- 'c' => 'XXXX918811113333XXXXX',% v2 u% N4 \, o
- 'd' => 'XXXX188111133331XXXXX',7 o8 F, N2 n# p9 C/ W9 |
- );
8 m! x6 @5 a7 p5 E; M/ Z - 7 q; j3 m6 G4 j6 q
- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
1 H4 c! z8 i+ U) b. E: t' K1 B; i
+ U- U' y! d7 D% z) N) a- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号' p4 ]: S4 ]9 N
& B/ x) c4 U) h( p- /*** \7 V ?! W7 W3 p( h# A
- Array; j5 [1 I- `' G( F
- (3 _$ m3 \/ P$ B) ?
- [a] => XXX25012349999XXX3 ?; M" `9 x, i ]
- [b] => XXX mobile:13188887777 XXX
. p+ z! l* M' m( L$ ?1 Z4 Q - [c] => XXXX918811113333XXXXX
5 y* ]0 Q# A* ~. ? h3 G- f& L - [d] => XXXX188111133331XXXXX
$ d2 |5 V3 v% C4 I - )" ?+ o3 V" _4 c% ~7 w w' I
- **/
复制代码
9 V" A, x! {5 {7 S! s' p1 D- }. ^" J* s6 @/ C v3 `, F
|