|
strtr() str_replace() substr_replace() preg_replace()
; u9 o7 k3 t# K6 u0 M/ |strtr()的用法: - <?php$ m8 \* n V0 X9 s5 I4 ^
- 0 F0 M! _* V; [* B5 M' i2 L, A1 X( N, z- q
- $str = "test";
; _4 h, f x1 d. h! u% W) K - ( k( t; Y% _+ l& V
- $str1 = strtr($str, 't', 'z'); // zesz
5 J" A8 e: n3 e$ y2 ^0 Z - $str2 = strtr($str, 'tt', 'z1');// 1es1- F: C% a) k( D3 E3 r0 a7 T' q
- $str3 = strtr($str, 't', '');// test; `& r' a" x9 N# w# C _+ B1 L
- $str4 = strtr($str, 'ts', '12');// 1e21
* d1 a3 K' h; r, M! z - . z# v$ A7 c% Z. f' M
- `" @8 ^+ Y1 I. _% [
- $str5 = strtr($str, array("t" => '')); // es
! k8 |% h0 T' |% F$ M - $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
* X" Z" O: |; f0 ]+ H' f# ~$ R5 h# q2 U 有两种传递参数的格式,一种是数组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
! ~8 ~" D t- I' {/ H: y% fstr_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php
9 u! Q% {; Q* D5 ]! G) \$ {/ [6 O - 0 R4 F- N2 \+ d/ f
- $str = "test";
2 F$ \5 Z- K6 x3 g/ E4 I - & Z7 C7 j1 Z; S. H
- $str1 = str_replace('t', '', $str);// es
' F) u, q6 t0 K0 x - $str2 = str_replace('es', 't', $str);// ttt
! c: T1 q! Z. w8 B
, m$ `0 v2 J+ X4 x) v2 I8 @$ l- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
! j; b' h. g& y D) f- `2 ~: m( L - $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
+ i* y! e, K4 H) Y$ J n - $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
- T6 A% Z+ I2 p( h, V- t* w - $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
9 V) L" S4 z/ d t. Z4 p7 M# ? - 8 o* m5 }- ~5 Y$ B! U/ i
- $arr = array(, [: ]' B% |. `! O( D
- 'a' => 'testa',0 o: N% t: i4 y5 N( g+ v
- 'b' => 'testb',
" g4 f U8 G9 r, v - 'c' => array(
8 r1 u% S+ M5 E& U - 'ca' => 'tes1'," _: @4 p- A' N0 T; h0 ?
- 'cb' => 'tes2',
# C2 J+ E& m& l# h - ),
7 `3 }7 k0 [2 H! L* |, ` - );$ g& B ~9 O8 H$ K$ z
- 6 B! Q; f) v( D( Q2 J7 z9 M
- $arr1 = str_replace('es', 't', $arr);6 r' c5 g% O9 r( y; }
- /**' A+ l2 e5 a; |" [/ v7 Y- s3 ^
- $arr1 = array(
; a* I/ _4 L' F7 V$ m - 'a' => 'ttta',% M) W) E6 p- y& {" [1 j
- 'b' => 'tttb',% r3 h- ^/ }) W* W/ Q: y
- 'c' => array(
* `. q" T8 Q$ s" ?' |8 |- P! T - 'ca' => 'tes1',
* t) l- h3 \6 V% E. c" A8 v - 'cb' => 'tes2', b+ | `, X, g, l' E' z) A V
- ),
; g: m# Q/ d) k - );
9 r) ~- i8 b0 P4 [: a ~ - *1 C& f; k% W! R, f( _/ m
- *+ m! M: z. Y6 p/ d) w
- */
复制代码 9 `+ c8 y# L2 D5 E8 N1 u$ ~; C
5 o+ P) n# `, b, H2 z' \
" K2 a8 @- [4 ^3 q8 K" t4 wstr_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
' _1 h) M0 H/ ysubstr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php' j6 q% H' H! p
- ( X1 Q% v" U7 x) }# ?8 ?: J9 `# M+ Q
- $str = "test";* r7 m9 h2 |% D4 Q! A7 q
$ v: P, f, p4 i$ l8 @' \9 c. U9 B- echo substr_replace($str, 'zzz', 1, 2);// tzzzt
: q- u( b2 L: V6 v8 q+ Q" l; C
6 ^) k% V' {3 M3 I' A4 O+ C) V% E# E- $arr = array(
2 M! C' K% G& @+ t- ` - 'a' => 'what',: p0 Y! n6 R6 r3 Q( y" e
- 'b' => 'are',+ t9 Q, W$ i9 X$ g7 C
- 'c' => array(0 V1 ?) X$ b- f5 s* v5 M7 s& t* M% k2 F
- 'ca' => '11',4 y0 B6 ^( W7 W( j. D
- 'cb' => '22',& q A& u; |+ n* d7 J
- ),
3 v# O% v A+ q- X - );
/ G7 p: T. {( u
/ ~, I1 v* V" p" m- $arr1 = substr_replace($arr, 'ok', 0, 1);
9 S6 ?1 I/ d* M& ]/ N! P& W - /** H3 ~/ R U+ ^$ Z9 p
- $arr1 = array(
- q8 B' p G( G3 G U9 N - 'a' => 'okhat',
/ P) b3 y9 u4 j: K7 w4 v O - 'b' => 'okre',5 L; z7 [, J: L5 r
- 'c' => 'okarry'! g2 @3 A# i4 i" b+ Z
- );
; j9 m8 k/ f4 j) h- U) ^9 Y o - */' l" }" |7 T$ x; T; }& g
复制代码
1 `( h0 n% S( s0 G# \, O0 ?数组替换的时候,也是处理一维数组的字符串值。。 ; O, F" ^" Z- `; @2 X" a/ i1 I9 G4 T
preg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php1 ~) Q/ h: Z" A/ l5 V. d
5 B7 g3 F2 U7 V W- $arr = array(" h# i' V, u. Y- m' \% u7 f/ j$ y
- 'a' => 'XXX25012349999XXX',// 不是以1开头
$ c. ?* |3 h7 z: d+ `6 l) w - 'b' => 'XXX13188887777XXX',8 y6 P! \* E& w" L) j
- 'c' => 'XXXX918811113333XXXXX',; E& [0 I1 z6 Z3 o2 R- F; \7 k! \ T
- 'd' => 'XXXX188111133331XXXXX',/ p2 }; Z! A# N: ^: Z" B
- );
) i. M; F% V" ]; o/ t - : X! L- Y: ?! S) x( w. k
- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
5 M9 o0 ?) C, p; Y3 Y3 Q8 a3 I - , q; e/ Z! a6 {" ~- t) a# e
- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号/ d e4 ^' Q* }, ^7 M$ E
' y; t" U5 y) ^! ^+ M! E- /** W' s) @! ~6 t2 H+ d) O5 o! F$ P: y' y
- Array
$ t$ U. L2 ?& `6 \4 I4 ^ - (
4 ^4 c0 D6 |. U; Z3 j - [a] => XXX25012349999XXX/ I/ P2 Q- F) T# z+ _8 J& Q
- [b] => XXX mobile:13188887777 XXX
5 e b1 W3 H a8 N4 k7 z8 j - [c] => XXXX918811113333XXXXX
! b" {7 a+ d7 e* B( w9 E - [d] => XXXX188111133331XXXXX
3 l$ z3 |, Y( ?: m4 I - )# E& Z. e' y/ D/ ]% `
- **/
复制代码 - j# |/ r: D' E3 S' D4 Z
/ X( J- g6 e3 b# @0 T& R2 L/ n |