strtr() str_replace() substr_replace() preg_replace() 5 _# W/ F: u& ?
strtr()的用法: - <?php
1 i, E9 n0 k- B* ~- S$ o8 { - ! C( p: b1 f. B* A* I! z
- $str = "test";- v! `: X4 G- X$ h
- " ]8 J1 Y5 ^+ v3 S0 [
- $str1 = strtr($str, 't', 'z'); // zesz" V& j* ]- e/ Q9 J2 M6 U
- $str2 = strtr($str, 'tt', 'z1');// 1es1
. ?" A! B7 c- u( q - $str3 = strtr($str, 't', '');// test
" A) r4 {2 r2 N% V/ a) f - $str4 = strtr($str, 'ts', '12');// 1e21
9 c0 Q7 \3 S+ T1 C) X, ]
, D- ~7 D1 Q9 C0 O$ |& s
`2 v( D$ Z) h* h8 X0 ]- t3 y- $str5 = strtr($str, array("t" => '')); // es+ a2 j7 }: c5 s& m; h9 N5 E+ W
- $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码 9 _2 ^( H$ ~" o" C+ v) h7 r
有两种传递参数的格式,一种是数组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 I [& S) G; W" S2 f: q
str_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php
% O9 E/ i9 U Y3 F0 c" u: c4 z - : O! c& c4 A- `: z5 b
- $str = "test";+ U9 o; h& `% {# R' Q* K) F1 m1 W% _
9 w; k$ b) h5 H: d& [- $str1 = str_replace('t', '', $str);// es
9 }- X' N+ }3 E, z& ~0 _ - $str2 = str_replace('es', 't', $str);// ttt0 E: |, h* G6 u+ x3 u
- 0 @1 x/ a+ z7 h5 W
- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb+ j$ Q$ Q1 W J! M4 {. r
- $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae! U, s/ c& J( v d! A
- $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa& u# f1 i3 i' A
- $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
! ?1 H# C5 o9 ~- T- P! k& |
' F/ K# ?( V2 e5 H2 w4 F# l- $arr = array(5 ~1 e5 n A3 N/ [1 A( Z; |
- 'a' => 'testa',8 B k& N: a* N: S- O7 x8 i }
- 'b' => 'testb', U4 r6 M ?: h* w, {4 @
- 'c' => array(
0 Z }3 h7 I4 C3 y- ~ - 'ca' => 'tes1',1 p: z, D$ G' y8 U" h% J; Z
- 'cb' => 'tes2',* C8 N0 ?; k* `6 n
- ),: s8 A% { T3 [; ?
- );
" H& W) n* Z9 s - . S" W% F, r/ Z8 P& L! B, x) i
- $arr1 = str_replace('es', 't', $arr);' T b( \1 a6 c
- /**! c5 r: Q' w% K& t
- $arr1 = array(# k* D, H! S2 S/ \, d
- 'a' => 'ttta',
; x3 U. p5 c& l; z* P - 'b' => 'tttb',
+ k. b) ~. Z; T; X0 i% q - 'c' => array(! j6 Y3 g- D8 L E
- 'ca' => 'tes1',
! }, l1 V# H8 l" Q" B - 'cb' => 'tes2'," v; H/ f) X) U8 a) l
- ),8 m6 e5 w# h" P! t% g% t
- );: F. t+ I" w9 d0 q
- *
7 |' @* E7 f- u4 L! V" z - *
7 A* L* M! t4 R' z5 p - */
复制代码 + l2 C8 z9 O' Q- d
, n7 {( t; g! g( F) L
6 n/ @: O2 y w% Z% Y, kstr_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
+ [4 ?% I2 \6 D/ ~' F3 a% Ysubstr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php( n* J4 |+ |) \% m
- 2 }! I. |% f9 S% n! q
- $str = "test";
. e+ W% F0 T, }7 [: q% k - ) p5 n. X9 d" O" P) O1 {
- echo substr_replace($str, 'zzz', 1, 2);// tzzzt
6 `: O+ f' y. h' u+ [ - ; w1 Q! f8 g. P
- $arr = array(5 b3 L; r, Q6 C7 n. j/ e
- 'a' => 'what',1 e$ y- o8 e7 ]: b+ @
- 'b' => 'are',. h. D! A" K% U; ]
- 'c' => array(1 z% V- j @( x6 t
- 'ca' => '11',
) c% z, q7 k, P w# ?6 m - 'cb' => '22',
- |" m7 \' N! R+ j - ),
& w; m m% o* {8 }( x - );" y4 Q4 F$ w* E
- + ?- E7 Q8 P) z8 } W, p5 J1 J+ c( O
- $arr1 = substr_replace($arr, 'ok', 0, 1);
0 Q7 S$ @: K+ m - /**
; r) v9 c7 @0 `) e! X T: F5 ~ - $arr1 = array(
" R: k" c2 t* v2 ? - 'a' => 'okhat',
8 N9 H3 `/ _ J( P4 W C - 'b' => 'okre',
! c/ V I3 A' k! Q, l, v - 'c' => 'okarry'& E( F0 P4 Y6 \7 a$ q
- );0 X- C: \& K4 K N2 C% m
- */
4 D; t0 u% Q3 \, o+ l! H5 R% r( v
复制代码 % o! h/ ?& y! f) z
数组替换的时候,也是处理一维数组的字符串值。。
: ?, L. @9 D, k8 Bpreg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php
8 Q- K1 T8 G( W/ k4 u - ) q, i9 r2 v) U. w- N2 F
- $arr = array(
* ~1 ~0 P* }2 l - 'a' => 'XXX25012349999XXX',// 不是以1开头5 [# c; q. ]1 y, p. @' |* }2 [0 g
- 'b' => 'XXX13188887777XXX',! B' U# k" b3 U3 E- |
- 'c' => 'XXXX918811113333XXXXX',
) ]5 L1 u3 Q6 F& M$ z3 C- F - 'd' => 'XXXX188111133331XXXXX',- B1 @( b7 |/ _# `7 `6 s* n% e
- );
2 `6 L& T7 d1 {* X* Z: a9 V - n6 ]( O! b1 \, c1 u
- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
) f4 o) W& ~7 ?$ e" H' u
! L; N2 ]1 \( {: P- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号3 a$ m2 \1 T. n
- . n6 |/ k% j1 G" K( |
- /**" c. r! E5 F9 B1 w( n4 M
- Array
- \3 @1 |1 g% C! H. Z P5 o - (
; C, k5 z! O# @8 S - [a] => XXX25012349999XXX- N% g, @* R4 `: h. f& M
- [b] => XXX mobile:13188887777 XXX$ w7 P6 \ h' p+ A( f
- [c] => XXXX918811113333XXXXX& T" f- W4 K- i+ j* G. R
- [d] => XXXX188111133331XXXXX
; D0 Y0 c) }5 B* j+ {' J/ n6 G6 d - )
4 e A: a! G0 A - **/
复制代码 ; \) P. M- X# C1 E/ T4 a6 Q, u
' X3 s/ W9 O0 C |