|
strtr() str_replace() substr_replace() preg_replace()
" R4 S$ a/ B7 O7 F* rstrtr()的用法: - <?php
( U- G3 A2 D1 Z: Y8 p3 z
! b! I% ?9 X" ]! j$ Y- $str = "test";' _. i; e! i8 F! l' q# ^* `! b% f
- 9 g/ |0 L) m7 m- s0 d( y7 k
- $str1 = strtr($str, 't', 'z'); // zesz
+ H4 }- y2 I* u U/ }$ X7 @ - $str2 = strtr($str, 'tt', 'z1');// 1es1! a/ f( x3 p; i; t0 ?- j- R7 |! \
- $str3 = strtr($str, 't', '');// test6 ]" D& n3 ?, M7 [- Y
- $str4 = strtr($str, 'ts', '12');// 1e21
8 r; C" C( k( s4 Z) i" X* q - # e+ V2 E( ?1 b/ x) B, d
- 2 v+ u! Z$ _& I: e \! m& J
- $str5 = strtr($str, array("t" => '')); // es6 ~ H# ?7 A& m' I. v+ |) {. e
- $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码 1 w9 n/ n% J8 Y+ o, N/ 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 / z0 T& [9 l& A9 ?0 d
str_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php
. U0 l7 r& A7 \, [4 y0 q/ P - 3 \1 R; K3 A. O! k6 f4 W+ i
- $str = "test";1 |! h" B9 O, U) f6 ?- d4 S
- ) o2 }# e* f! r0 Y1 u
- $str1 = str_replace('t', '', $str);// es: c# m5 x5 m( T& }" K; {' C6 `
- $str2 = str_replace('es', 't', $str);// ttt
. f& h$ z3 K# o( g4 C+ t
4 V k8 P5 C: K: {4 U* o- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb+ R3 C8 K& p4 ^# \5 K5 ^1 g
- $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
7 {# Y( Y/ ~- W- H/ r6 h - $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa, Z+ [7 A- X# y8 X
- $str6 = str_replace(array('t', 's'), 'e', $str);// eeee; R; X5 `# m! U, ~
- 3 t+ i! K% Y3 ]( B3 E- t
- $arr = array(
j2 ?" g8 t; c, r! Y - 'a' => 'testa',
5 F8 q: a7 |% c0 e" G; w) K5 t1 d - 'b' => 'testb',+ N2 T) M/ {4 l' M; @+ A5 k# X
- 'c' => array(
7 e& |2 f1 {" i+ J& ~ - 'ca' => 'tes1',
, |2 e9 y" s R' A7 J" W( Q3 h - 'cb' => 'tes2',
' C) H% B+ V; n; O6 N e, L - ),+ N; C- f1 F8 S( D
- );; B0 ~& Y$ H. R0 L, ~2 E; B
$ m- O! @' N ?1 A- $arr1 = str_replace('es', 't', $arr);2 w6 {) q4 l( }% c" n7 I! z
- /**
7 I: w% T; K& l/ ^1 ?# Z - $arr1 = array(& Y# N& Y4 Y" O
- 'a' => 'ttta',
( u4 I1 T( U& X* y8 [ - 'b' => 'tttb',
5 Z4 w: F+ V$ S) {: J' a - 'c' => array(
1 O- H; q% X- H! ~2 P - 'ca' => 'tes1',6 m1 n+ p7 A& O) J' u
- 'cb' => 'tes2',
) z2 r+ ^: o; K - ),. [, `8 d. X; ]- _; |" n* X2 z
- );8 b: n2 k. {0 U1 Q$ t9 w' ]0 C
- *
0 z, X8 ~2 X ]' H6 _ - *
$ U m0 U& k# p. Z! @ - */
复制代码 C Q7 G) E- l6 O
$ h3 H0 Q2 x$ @" d4 p
5 h* Q" s: ^2 i; D
str_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。 1 c4 B8 e* P* Q4 B
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php B4 Q0 f( T) @- y, {7 S
- . _& _' l) E( X2 |
- $str = "test";
/ |: T* n0 @% w; D r8 [
P9 Q4 P2 K2 l: S- echo substr_replace($str, 'zzz', 1, 2);// tzzzt
: |- `! S: |$ |# U" p - ! O1 T# m) }( U1 M) B1 u% s+ ~
- $arr = array(: N H7 a- P; H2 i6 J J) D0 Y
- 'a' => 'what',. l7 A7 ~5 O' J/ y
- 'b' => 'are',
; L3 {9 \/ J! g" {6 ^, j8 k: G, q. O - 'c' => array(2 L, p: D1 \" D3 D/ U7 T$ R& i
- 'ca' => '11',
: G% ]( O2 h# ] - 'cb' => '22',1 d* w5 x1 T2 x7 w( Q/ ]
- ), n5 N9 l9 M4 V; B% E( R
- );4 d4 ?# }( w$ s* R
- ' q2 O _! Z0 W+ ]# T
- $arr1 = substr_replace($arr, 'ok', 0, 1);
2 z# @: N$ ]- J% [ - /**
/ m- T9 \/ P [, v$ u - $arr1 = array(; ?9 @8 S( m5 m4 R2 ?7 B" b
- 'a' => 'okhat',# `8 f/ L" T Q; f& O* C
- 'b' => 'okre',* O" j( j, S3 n) `
- 'c' => 'okarry'
+ O9 Q0 q) X4 w( k3 A) Q6 Q - );
. E1 ~! W9 \1 u - */
3 K# u3 a8 R- P2 @4 |( ^
复制代码 $ ]. z. h* g. g/ c& J- b) c
数组替换的时候,也是处理一维数组的字符串值。。
6 S) U4 m' \) ^1 X" b2 dpreg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php9 t8 j# p+ c! L+ g# L
- * o( {0 l% B# c
- $arr = array(" _, J8 u. w/ N# n4 B. a
- 'a' => 'XXX25012349999XXX',// 不是以1开头) V6 }6 u+ V4 G8 W' K7 g/ [
- 'b' => 'XXX13188887777XXX',; g7 Q& U1 Z1 u9 t
- 'c' => 'XXXX918811113333XXXXX',: Z; _1 Y& i/ Y5 i5 ~3 g6 E
- 'd' => 'XXXX188111133331XXXXX',
# S# U& h- c" M; c - );
3 D. s# F9 w( r
! a* `5 [. ]3 t2 f$ [/ Q2 u- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3# O1 |- ]% [; c5 o2 ?
5 p6 ?6 K) H- `- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号+ r- [, K5 c$ ^- q/ Z4 O3 W
8 l. r4 f9 l9 f/ h6 s- /**
& y& _8 g, a* j# T1 g# K5 x - Array( q+ |6 X5 O; l( v
- (3 u+ M0 F1 _8 g! l) i! |
- [a] => XXX25012349999XXX
1 q- a+ D/ ]* {: }/ f, k; q0 {0 i - [b] => XXX mobile:13188887777 XXX! [& D& j7 A9 \1 G: Q$ @
- [c] => XXXX918811113333XXXXX9 B4 p% ?" c- O# G, [
- [d] => XXXX188111133331XXXXX
* O' ]' Z6 b% i* D' X - )/ E# g/ L+ a- w" m, k: ~. i- j
- **/
复制代码 " f: k+ Y+ r$ E* J% c& A# Y9 ]
4 V3 ? {; s0 G# Y6 c# x% ?
|