strtr() str_replace() substr_replace() preg_replace()
. j9 |( A! {9 Q* s2 u% L. wstrtr()的用法: - <?php3 T# q. Z' P$ `) n
( y; w& p6 Q! G4 U. [0 u! f- $str = "test";, K) E7 ^/ R" x9 y
- ) _7 I: ^4 @7 z# U8 f# V. L; }7 h. V1 \
- $str1 = strtr($str, 't', 'z'); // zesz
% R2 ^! v: [" X. H- C - $str2 = strtr($str, 'tt', 'z1');// 1es1" R' P6 v" A& ~2 W r, ]8 Z
- $str3 = strtr($str, 't', '');// test
( x" y4 N4 S. y X- u- G/ h6 f# Y# { - $str4 = strtr($str, 'ts', '12');// 1e21
! P8 x4 g& h4 J4 Z% ~8 f+ D4 t5 T; @ - & K' N% n2 F3 b
. f" y# \0 Y$ o* ~" Q- $str5 = strtr($str, array("t" => '')); // es' v) w# Y& p1 `- W2 e# ?+ \! w
- $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码 - n3 I" P: Z2 y% J0 j
有两种传递参数的格式,一种是数组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 * {5 ^( k4 F" F+ T
str_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php9 L6 c% V' ?, N! j3 |, E$ k$ O! o
- % w3 `" Y& F- H' |' Y
- $str = "test";6 [0 D; s7 _- ]$ e, _ S3 E
8 s1 m& d9 P9 s+ M7 {! W, G3 W- $str1 = str_replace('t', '', $str);// es
2 c& i7 a( o$ a+ k3 h1 ~- i& l - $str2 = str_replace('es', 't', $str);// ttt: `/ A- @; V) Z% \5 y; w
- / W3 @# G1 n9 I! t5 e5 T* ?
- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
0 e" ~! w' i. @* b( e% { - $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae7 z# b1 u# Z" Z# d V! w5 U* \
- $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
' g4 m# v; ^' D - $str6 = str_replace(array('t', 's'), 'e', $str);// eeee2 u( ^ q- H0 `) W6 s; Z
- 3 G4 o: v9 r: q
- $arr = array(- m/ v6 I) ^8 J5 u9 ? P4 i" g
- 'a' => 'testa',
" M/ E, H/ }% F1 n# ^, D U - 'b' => 'testb',& J Z) h9 c1 a4 J8 R) S- |! O: I
- 'c' => array(
+ v: ~; G7 U. t8 Z3 ~& x* O7 ?: r - 'ca' => 'tes1',
2 O% r7 j% }& V/ \2 g7 G - 'cb' => 'tes2',
9 B0 i$ I" U4 B, H - ),0 v- P$ M; I3 w/ I) M0 x
- );- s& S; h, ?% g$ U( r
- 4 k. X5 H0 d1 G1 h4 o7 J
- $arr1 = str_replace('es', 't', $arr);
d! @1 |# _, ] - /**& A% X, @7 f8 e; C+ i
- $arr1 = array(
8 L l% d2 o- q6 G- Q8 g/ P - 'a' => 'ttta',
Z2 G6 x1 J4 J) w5 W! s; { h( W - 'b' => 'tttb',
3 z. j) B/ M0 w! _! A' X - 'c' => array($ I4 Z* j& U1 ?" O
- 'ca' => 'tes1',
# q' ` |9 R% w6 R' v2 D1 P: v7 F - 'cb' => 'tes2',: x/ k# e% `8 I; ~1 H% V
- ),6 r2 t* E' ?2 c4 U, t
- );
5 z9 |. o _" T2 h& X+ c - *$ x1 ]* V7 W0 ?- q8 @- y
- *% n5 D! |. i% m* @
- */
复制代码 8 r; l. m$ D4 {) T5 m
6 p) z) S' v; C( \- [. j
& B) n6 S' U/ i! @. `8 Xstr_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
4 |' @: }+ p0 W6 s" h, Ksubstr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php, G3 w6 d D9 V! ^0 n. i' W9 l8 O/ G/ ^
- 5 _5 B U( Z/ p- q6 z- F; e3 s' }. R: M
- $str = "test";9 g# i3 r/ g- o4 Q
- 2 J8 J R- U" X) m& N' e- C/ _( B
- echo substr_replace($str, 'zzz', 1, 2);// tzzzt1 Q" \- R% u+ e$ K4 K8 d% m! ~
- ' g8 u2 N6 d5 D: Y
- $arr = array(
8 j1 t# C1 ~7 Y' h8 k - 'a' => 'what',# P: l' w/ |/ o" Y2 ?- S
- 'b' => 'are',0 q& o& p0 E6 J) t- B
- 'c' => array(5 N1 o: D" Q4 z9 U9 \' _
- 'ca' => '11',7 Z: R7 A7 Z' x5 ^3 ?
- 'cb' => '22',' K& X3 p' o3 s3 @9 z
- ),
' S7 b) J7 I9 O4 R - );. V: |( L" W8 _3 y d! m
- 2 P* b# A# W5 \1 N+ `- E
- $arr1 = substr_replace($arr, 'ok', 0, 1);
. i1 s7 T6 {3 [ - /**
. Q' n7 L M! S7 ?1 V a - $arr1 = array(: s d3 D- S) T# N. \8 {( X7 p
- 'a' => 'okhat',
' E) X: o2 v, t9 x( V% m4 V3 r0 I - 'b' => 'okre'," g9 u }! H: @
- 'c' => 'okarry'& G- X' l" {1 q, i# Y
- );: U& d2 k" L6 [% B% r9 |
- */% d- U; s4 B5 e8 w, l- n: g; i- ?0 \
复制代码 4 c; r; A- N# U6 h+ f7 a/ ]
数组替换的时候,也是处理一维数组的字符串值。。 $ A! ^/ C2 }9 F& y& Z, f2 q m; U" m
preg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php' S @1 S5 b1 w8 V% O5 ]
- T7 L4 ^0 r* |, J: _) D) p* j/ t- C
- $arr = array(
, j; _: u, K/ j# O - 'a' => 'XXX25012349999XXX',// 不是以1开头( F' a4 e9 j" S1 ?& A* I- X1 Q% F
- 'b' => 'XXX13188887777XXX',4 y. L/ t4 J, [
- 'c' => 'XXXX918811113333XXXXX',6 Y/ w! B# C) q2 g" [- A
- 'd' => 'XXXX188111133331XXXXX',
% h4 j' [5 T0 X7 ^5 c1 S" z - );8 w3 E" y" b, J: Y! O. s/ |
e+ e! e1 \. O8 }' K5 d5 d3 O- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
/ N4 x5 H7 G u5 m4 F
* H' r f: e- i- N4 O v" k8 N- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号3 ?6 n8 \5 y2 E. l
- ; O- N2 b/ L" I0 [+ S. r
- /**7 T( a$ z7 [; F- T: [. @: \& O+ @
- Array
: R1 t: b( F& i# w {! E2 k - ($ B1 C, m+ _; S! c4 [
- [a] => XXX25012349999XXX4 R, R, \9 c0 D' V' n
- [b] => XXX mobile:13188887777 XXX
/ ?2 R: k* N7 n' F4 }8 ?2 Q - [c] => XXXX918811113333XXXXX0 N6 j/ {- ^" g ]3 m8 @
- [d] => XXXX188111133331XXXXX/ q# L0 {% I3 `4 P
- )
( w/ {6 J' n( o1 I! Y - **/
复制代码
% H& W( z% n9 B% _% H# q, v9 _* Q
|