strtr() str_replace() substr_replace() preg_replace() * A, r q1 v. W
strtr()的用法: - <?php* t) m) o- x* s l" T0 U
- + q2 V! T0 g' j2 e( s! {) |$ J
- $str = "test";
7 J' d* f( R$ g/ X$ D p - + x# c7 U- R9 C+ o
- $str1 = strtr($str, 't', 'z'); // zesz
- C. J( A3 D, Q' R5 n c - $str2 = strtr($str, 'tt', 'z1');// 1es10 D$ V; E4 i. Y& Q
- $str3 = strtr($str, 't', '');// test( q0 }' e6 K6 ^! c, |6 H, l
- $str4 = strtr($str, 'ts', '12');// 1e213 e9 Z+ Y" \* P- ]
- ! ?7 a6 Y* |' M" h$ [) N
) c: [8 @" A2 Y, @6 }" }/ `" p- $str5 = strtr($str, array("t" => '')); // es( V! Y1 p/ B* Y9 S
- $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
i' w4 e' l- `" g3 S' c1 q4 q0 \ 有两种传递参数的格式,一种是数组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
# y$ e U% H& r% x" Estr_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php" m+ T8 n3 O$ n: K* h% q
- 5 ]7 O& M1 o$ y' F
- $str = "test";) M$ W" I8 f c/ s0 D2 j+ ?: ]
- 9 o$ V% |# V* j0 b8 {' ]
- $str1 = str_replace('t', '', $str);// es
, t9 {3 W3 ~" h" A2 b - $str2 = str_replace('es', 't', $str);// ttt/ I6 E1 X# G. {- W, E& X$ e7 H
' q* K; D3 v1 n3 _5 i6 u- O- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
0 s3 ]0 E) ?, Q/ E1 e - $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
. v5 Y* T: V( g A - $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
' q; ]9 F, A$ k# e7 V, x( t7 v8 A - $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
$ Y8 W# P- m% S
: m9 u% z4 |0 y% n6 |- $arr = array(
* S( [: F d, h0 J' G, N9 u5 U2 Q! M - 'a' => 'testa',1 B) G) @! n+ d8 P8 ?5 I3 k( Z9 n2 S
- 'b' => 'testb',. I. L$ K8 ?8 O3 [$ I
- 'c' => array(
# H' k P" o( x, p) O - 'ca' => 'tes1',# e6 @$ j% ?3 l
- 'cb' => 'tes2',
* A8 K8 H; {. k2 s - ),7 _" A( m3 |6 c' }! p
- );8 q7 K% Q& G, z" ?4 ~
- 6 k+ v+ b" h \3 O K$ {1 ]) L" y V5 ?
- $arr1 = str_replace('es', 't', $arr);+ B/ C3 O* |( P6 y3 Q I2 `
- /**
* T" ]2 s* d' O+ m9 H0 V+ ^ - $arr1 = array(
( t- E3 M3 R" _5 j - 'a' => 'ttta',
. q) t1 P% {- ` - 'b' => 'tttb',! D0 L0 m% x; h# \
- 'c' => array(
6 }% @- A9 I! ~/ ]" ^8 b - 'ca' => 'tes1',. r1 u# D: @$ @5 F" F/ N$ @( U6 N
- 'cb' => 'tes2',; j, _# n5 H- H! W
- ),
/ @% {8 r. f8 i( k2 u8 B1 e - );
3 z6 L' U1 B, [: R5 w( A - *' L' s9 R( N1 I; T P7 M( v6 @; x2 F
- *
; V: h! ~+ Z" X - */
复制代码
. h" Y% Z' X" \% G0 t9 n: j$ k# W3 F7 u" Y) { f
5 n5 ]& `( D& `) C7 A
str_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。 ! g, g/ N: \! P2 r0 U8 w; G
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php
* D, K% Q, }' R1 z8 v. {! ] - # \4 c# Q9 B3 ~
- $str = "test";
" R, n4 g8 v1 D" | - 3 Z8 e* H7 D5 @0 p
- echo substr_replace($str, 'zzz', 1, 2);// tzzzt
- q! `* z. q: R8 V - 9 E% H, L3 _9 j. m
- $arr = array(
2 @9 H- `5 k, d: S( w) x" ^ - 'a' => 'what',8 T/ [" T) a8 \) E5 Z% b: a& R+ b
- 'b' => 'are',
2 v3 A8 H% g% y' t8 a2 x - 'c' => array(
, K8 E. |! r; _2 a' T - 'ca' => '11',
7 t2 z/ W* g( }/ T2 W' q - 'cb' => '22',# v4 o& W% [2 ~/ Z9 B! p) i. {
- ),
3 U+ w! D3 }0 k4 z6 b- _ - );( f8 u/ ~3 N; x7 |$ f z( x1 q
( V7 }9 G6 c7 d6 b! f" N- Z- $arr1 = substr_replace($arr, 'ok', 0, 1);, f9 u! f* f) Y' D( `
- /**- [1 p$ v* F* K
- $arr1 = array(. |6 o! E3 f( M& J& Y* R6 q- n5 a
- 'a' => 'okhat',
) Z. h- Q0 P4 m - 'b' => 'okre',, _+ m/ U2 G: A. t+ Z( o
- 'c' => 'okarry'7 x. S0 L6 j; w2 n0 m4 O* a5 y
- );
! P) u) X3 Y G - */1 Z" C2 p k+ H4 y& e! |+ y1 q
复制代码
+ e. m7 p* s: H/ k5 g数组替换的时候,也是处理一维数组的字符串值。。 $ W, R; x+ C [& K6 y
preg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php
; m) z# x# F1 X7 x7 [ - 4 S1 a0 H6 s$ q- }+ o
- $arr = array(
! r: w) H7 i) n4 o - 'a' => 'XXX25012349999XXX',// 不是以1开头- D/ k* G* r. x: P* ?5 q [" F0 z
- 'b' => 'XXX13188887777XXX',8 [$ b, M& r+ z9 X7 {
- 'c' => 'XXXX918811113333XXXXX',/ m8 n% Z* X$ ]
- 'd' => 'XXXX188111133331XXXXX',8 s8 v2 V) Z9 Q: }
- );
, B# A t7 \/ a% A
/ q* L }) H* {3 K5 T3 U- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$33 o" ?! y8 a% G
- - g" K1 G2 ]/ x8 t1 w `
- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号8 N% ~& v# | p( m! a
" @3 k7 R: c& |- /**
i- C& _/ y e o' K - Array: N0 M/ K- d, c; s' {
- (
2 C+ A7 W; }) G. O. x0 s$ ^5 { - [a] => XXX25012349999XXX
+ w- ^! S, b7 I) c5 g. @ - [b] => XXX mobile:13188887777 XXX+ C. V9 D- ?$ ^% @, h
- [c] => XXXX918811113333XXXXX, V; l& F5 d6 f" O
- [d] => XXXX188111133331XXXXX0 ^3 [2 B; U7 C% S4 `
- )
5 g1 @* I+ x1 V( j7 u! { - **/
复制代码
, v3 @& T1 _2 k+ X
3 |$ Q, i3 h* ^+ \, u$ ]2 T1 Z |