|
strtr() str_replace() substr_replace() preg_replace()
0 \8 ]" ]! j/ mstrtr()的用法: - <?php
2 Y, F% i; h/ `' `' R5 u
, |1 m$ x: w& w1 T- s- $str = "test";
/ X5 q7 Y. @4 ]
* O' A) \: J* _1 F/ X- $str1 = strtr($str, 't', 'z'); // zesz) w- v8 ~0 C, A# t+ }
- $str2 = strtr($str, 'tt', 'z1');// 1es1
! U" n* H0 `0 ?0 ~- g - $str3 = strtr($str, 't', '');// test
- n7 ?; O& P+ o1 x" D. b: W$ B$ V" [ - $str4 = strtr($str, 'ts', '12');// 1e21
: _: p8 c3 B4 R) }3 Y6 ~
+ ~: ^- d' P U5 v' n
2 ^3 y9 Z0 E, r5 x+ _' x' n8 @- $str5 = strtr($str, array("t" => '')); // es
! v+ e/ F! ?3 ]; Q/ V0 u - $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
- z! V n6 V2 D- E4 T* }! a6 _" v 有两种传递参数的格式,一种是数组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 ( M& \8 @- b4 Y F* e" w
str_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php
2 p' q/ U7 k/ t4 b# j; a
+ O2 ]$ P2 \& d, T5 R. M- $str = "test";: f* ?. U1 A" }- _
- # ]3 _( @+ t$ o4 z1 D4 V! p$ D' G
- $str1 = str_replace('t', '', $str);// es7 d% f4 |- N3 r7 z# {7 B5 I
- $str2 = str_replace('es', 't', $str);// ttt; q+ I0 [; v @% b. Z% i
& \2 E/ F6 t% w2 ]* Z1 I. m& |) b9 X' u- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
; @6 g3 z, W" ]+ Q$ c - $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae7 F# k: y) S* }2 H3 X; b8 g# V7 M
- $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa7 o, w% K+ y% }/ B9 h
- $str6 = str_replace(array('t', 's'), 'e', $str);// eeee3 `8 a4 P5 Z) O- L
- . G) W5 E- @+ P H0 e
- $arr = array(+ m* i# O- W- Q9 \/ j' B3 u0 N
- 'a' => 'testa',
# G( f9 D6 i# r! ` - 'b' => 'testb',) h: q; P! |4 H/ S6 w
- 'c' => array(/ M+ v* I, K* h. D' e4 b" b T
- 'ca' => 'tes1'," O1 {& ]( ?" T U" Y( @
- 'cb' => 'tes2',% f# x7 z, k# F
- ),
; W( h* A' g% { - );$ r: ~% e6 r9 O
- 0 I" o D$ p2 P0 C y$ i8 P
- $arr1 = str_replace('es', 't', $arr);0 N0 h2 T4 t3 ]$ k: k& z1 n* O
- /**
9 M( K' |" q8 g# ], { - $arr1 = array(7 x/ Q7 _ F3 ~
- 'a' => 'ttta',
0 a; e9 y; J" C( P - 'b' => 'tttb',
. {- j" V0 L8 T8 s5 h6 f - 'c' => array(
) X! ]* Y2 c3 l+ F5 e" q* ~, N - 'ca' => 'tes1',/ [+ |' ^; Z1 n3 l) G
- 'cb' => 'tes2',
" d3 Q q% `. K+ B9 V! D - ),
- C# k) b) Y; C2 r1 f; f - );
" `* D M! V( n( _' E! e6 B - *% o+ ?# {- o- c9 X
- *
$ }$ u1 w: w3 V( D8 ?6 u' G - */
复制代码 1 v7 ^: t) F# Q4 Q( K c/ C
: e" d' K, S5 Q& L8 D/ R4 ~" V% p* [
str_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。 * q; W) h8 S& U$ _$ y: J5 f
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php
4 X, [& W9 S; ? - ) K8 `; d+ o; [' V- W
- $str = "test";6 D6 E; K5 k) Y( ]5 v
- 5 l& {5 l; I5 {* X+ p4 [! ~
- echo substr_replace($str, 'zzz', 1, 2);// tzzzt& C) V) |4 f) a/ p: ^
# u1 i- w6 d% q9 q) s3 P, u" S/ U- $arr = array(6 P7 l. M9 n' M1 e6 m0 J6 H
- 'a' => 'what',+ f' C" F, `: S/ V
- 'b' => 'are',) [. U' u" ]. h# y0 b4 m1 A
- 'c' => array(
0 T/ U" @& r1 c. ^1 Y. Q7 b - 'ca' => '11',# b4 R0 M6 O; h2 }& e! b6 i
- 'cb' => '22',
0 v4 _+ @8 P. t' N" S' ^0 f/ k - ),. w6 `* d, s" M, n+ Y
- );
* M' R" s6 o8 \. e$ W2 N% T' q - 3 j' o5 k& v2 \) E) J. M9 V
- $arr1 = substr_replace($arr, 'ok', 0, 1);8 u7 b# W# J7 ~0 E/ F; ?
- /**
: ]6 H# `+ v8 F0 A8 d8 X - $arr1 = array(
! C8 @& f' X+ }% O* q/ d# K8 G - 'a' => 'okhat',5 u* E; t! l' N: B- @1 L( v+ N9 U6 M: l
- 'b' => 'okre',
( x% \+ k! S, v$ `/ D4 m - 'c' => 'okarry': W! x4 U, x9 D
- );; V4 s% J+ l7 k( |, C3 {
- */
4 Y% d1 d9 r& e% T! K9 |1 V
复制代码 ) P$ a- k1 d3 T" D
数组替换的时候,也是处理一维数组的字符串值。。
' ~; _/ Z) M& [" G. opreg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php4 k8 f8 ^* E8 z& i
$ _3 z# {( k& `. ?# {- $arr = array( U9 r+ K; B2 p3 M3 W
- 'a' => 'XXX25012349999XXX',// 不是以1开头2 c; [2 r7 I+ ]8 m" z0 Q" h
- 'b' => 'XXX13188887777XXX',, G+ Q8 Q+ _# L/ v) O5 \9 j6 R7 G4 m* ^
- 'c' => 'XXXX918811113333XXXXX', q, ]+ K& d7 I: p, V
- 'd' => 'XXXX188111133331XXXXX',6 T* Z1 w* Y6 V1 f0 v9 k) \
- );; e+ g' g9 { X% E, v+ E
( U3 F9 w2 @/ m! B G* ?4 o% K6 E- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3' u- v% o2 P0 z
4 i+ O& I& ]% _8 L3 U- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号$ H2 q% Z5 S# x3 r% K9 t. c/ ~) T
- % w6 j* d( O( `) h9 y; G2 [
- /**
0 W& ^8 ^$ Z7 ]- w3 u - Array* ^0 C& w) e1 ~
- (
5 G5 _. ?. q2 R" g - [a] => XXX25012349999XXX
, K: d0 R) c k; g8 b - [b] => XXX mobile:13188887777 XXX
' n7 _# k: a' Y4 p$ e9 f6 S - [c] => XXXX918811113333XXXXX- ?) w! F1 a4 x( k9 L r( B5 X
- [d] => XXXX188111133331XXXXX
9 t8 K5 K8 I; K9 j9 g* {6 l - )! ~" y. c7 k& ?5 L* P
- **/
复制代码 ' Y' L2 u7 {5 H* y' m9 J
6 ?6 u9 T2 D$ J& C |