strtr() str_replace() substr_replace() preg_replace()
2 x) a8 x$ }5 c o; Istrtr()的用法: - <?php3 N. T4 p/ ~* }& y. ?& `
- 5 o+ ~- p+ A1 w5 M J6 Z3 @
- $str = "test";
# \# v9 m7 c% Y1 @* r: T - 9 |- w% N" E8 A \0 i$ H8 u5 s
- $str1 = strtr($str, 't', 'z'); // zesz
0 r! U( G4 c5 o+ u# J" W - $str2 = strtr($str, 'tt', 'z1');// 1es1
X! x0 {( m% @4 I/ W& N7 Z9 ` - $str3 = strtr($str, 't', '');// test
; ^5 o" d4 u. |9 U0 [% c - $str4 = strtr($str, 'ts', '12');// 1e21( N( f; z) _% x; ?9 {; @1 w; W3 v
* k3 N6 ]* ]8 D" ]+ D6 i1 O- . L) N% B- E( W0 C* ?
- $str5 = strtr($str, array("t" => '')); // es7 H. _8 I# {) G. W& y$ u
- $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
0 A# \4 ]. |; W2 P: a; z/ @$ k 有两种传递参数的格式,一种是数组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
0 E7 h' k1 N( W7 p4 L9 ~str_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php
% b8 `$ H3 P6 t! \
* ]! E$ x/ v0 ?* n- $str = "test";8 R2 \2 a( y4 g* R' z# e2 `
7 n. A, a0 n' T+ [- $str1 = str_replace('t', '', $str);// es
. @) Z* ^* q w1 K) \ - $str2 = str_replace('es', 't', $str);// ttt
: d6 m8 \: M. W5 h7 Q - & ~; t9 J2 n$ H
- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb6 i$ d7 R7 G# y, q7 b {
- $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
6 K( o) `" X0 d N! e# { - $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa) t$ }8 }( I) o$ U& J7 Q( s, C) V& N
- $str6 = str_replace(array('t', 's'), 'e', $str);// eeee$ v! y7 J8 [/ w7 H# C
9 l% H+ ?( n# Z# P- $arr = array(
/ u, p; o8 `" [" P6 |/ W - 'a' => 'testa',& D& N% o" u3 A, k, [) H" v
- 'b' => 'testb',/ U4 l7 D d* X$ a' B" O
- 'c' => array(% t; O: C$ u8 `9 |& C
- 'ca' => 'tes1',8 h8 m9 U6 h3 d
- 'cb' => 'tes2',/ C/ L' F7 e$ t2 Z p! ~( z
- ),1 F0 f3 I; c) c/ E7 k6 ]
- );
7 C3 R5 H/ m% p% X. P0 Q# ~) B1 w4 u - ( k& z, [0 I5 L% ?5 F' ~
- $arr1 = str_replace('es', 't', $arr);
6 C+ C, P/ K, o# `' L6 M - /**
4 ]- Q( f, z) C- I+ F - $arr1 = array(7 l C' u# M3 K2 X. D' G- z* B
- 'a' => 'ttta',
" _4 D( C$ N1 g" H# `" g - 'b' => 'tttb',
. F0 j3 N; u$ P" h* M) _4 o - 'c' => array(
7 ^+ |( f9 s* |6 |& P - 'ca' => 'tes1',8 S+ x" e/ L! ?. X1 X2 u
- 'cb' => 'tes2',
6 h6 m- C" q; o4 E" h - ),
% n/ B, g' B) z8 ]- I - );( M6 O* j6 s5 G% U% \9 O+ H. X0 h
- *
1 [, D$ b) Y- K+ F0 S7 j - *# _2 H% a4 Q4 A( M0 B% S
- */
复制代码
6 ^, L' [8 c; g2 P
! k6 A5 z9 q' D! W5 q/ R I8 ~; m) i6 a1 y% ^% I6 d: K8 @
str_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
3 a; @, t! G, [. P, I2 nsubstr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php
9 A: |$ C! d+ h, ? - 4 N: k" z0 ~' t) x( O7 s
- $str = "test";
! d, t5 b; t, S, p& F( `
, y2 s+ r3 n1 B, S- echo substr_replace($str, 'zzz', 1, 2);// tzzzt
& ]* y, X5 q; l5 C3 U4 O
& q7 {. g+ u0 m1 T* M6 l; L- $arr = array(6 ` j+ C1 p+ m$ b
- 'a' => 'what',
7 P& t) N- u7 k0 j) M6 g! S - 'b' => 'are',1 {" J& i5 u1 m1 n; J* r% K
- 'c' => array(# p, e- U! _; _: g% C
- 'ca' => '11',, P6 ]8 N# ~$ U7 G/ s
- 'cb' => '22',9 _5 y4 |5 m1 ~" y3 k0 |, a' R
- ),
; K4 O% l8 V2 o6 N - );! [3 Q/ l! z" {3 ^
) ~- u* U7 `% j6 D! y- $arr1 = substr_replace($arr, 'ok', 0, 1);
. l* H) I+ k, [4 o$ D4 t+ L - /**) m& y* n7 T7 Z
- $arr1 = array(* n* l/ F/ p! P3 b
- 'a' => 'okhat',$ p' K: c! U u9 h6 S1 C
- 'b' => 'okre',
' q9 E I# a+ M- e3 i n- O - 'c' => 'okarry'* q' M5 |( s' ]
- );0 f/ L U9 q3 _! ~% E
- */1 m6 O6 Y2 Y, G- Z7 {- u. z9 n" h
复制代码
4 m& C$ {$ d) b. v( r- }. \2 L数组替换的时候,也是处理一维数组的字符串值。。 J& A4 b( R! V0 e# H' E
preg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php; X6 C! u$ n" m* N# k6 N9 ~ Q
- * F5 h) G7 }" |5 x
- $arr = array(
* L+ G; T) ^' A) a9 H1 T - 'a' => 'XXX25012349999XXX',// 不是以1开头 w" k* C: l3 ^9 S. V3 Y. T
- 'b' => 'XXX13188887777XXX',# @8 U8 w- n# H. B9 X1 U# O
- 'c' => 'XXXX918811113333XXXXX',
6 R# d& o! n8 f/ _& D B+ K* k& I/ D0 X1 ` - 'd' => 'XXXX188111133331XXXXX',
: [9 y3 M, n& P8 \ - );8 q2 h% w1 |& k4 N @
1 Q0 b( R3 }. B8 o; Q. P8 M: R- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$39 x: i& C4 M. Z5 \ N
4 s9 Y! B) b( T+ [8 Q1 x7 n& h- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
5 C' u# l2 d+ m. G9 K
( I8 l4 `7 l% ?+ Q+ Q6 v' Y- /**7 x% `- x- F2 m1 c
- Array0 Z# H; D8 g8 B5 z9 c8 m
- (
3 H+ A J4 P8 D$ W+ B - [a] => XXX25012349999XXX0 O4 v: H2 \7 @5 S
- [b] => XXX mobile:13188887777 XXX1 F/ i! z( d' I; n! W
- [c] => XXXX918811113333XXXXX
% C! R1 a" p. ]5 ^- }( N+ l7 Z% V - [d] => XXXX188111133331XXXXX
& k. k& L* x V n& y: p - )
5 O( o l: d% E- T1 C - **/
复制代码 + r& J" [+ z, u5 H
6 ]) |( U+ |7 n$ F4 G i2 i2 S4 ^
|