|
strtr() str_replace() substr_replace() preg_replace()
$ l" ~6 n3 v* r2 t8 kstrtr()的用法: - <?php3 O' E) [. ]/ B$ U6 ]6 z! f; x. h
- ( Y- w& P2 n8 B1 O" \: w! C
- $str = "test";
* V- B5 e! |; n - / _5 E" D2 N' [1 L' R! b# g
- $str1 = strtr($str, 't', 'z'); // zesz
; e5 [5 c: D" { - $str2 = strtr($str, 'tt', 'z1');// 1es1
# t$ d7 n3 [/ `% ? - $str3 = strtr($str, 't', '');// test
( q" M) \8 _& L2 h - $str4 = strtr($str, 'ts', '12');// 1e21
8 Q0 F3 C! f5 v" P e" s& n4 L
. O. l$ J3 V) Y7 Y- ; D; g: p M) N+ j+ z/ {+ H Z
- $str5 = strtr($str, array("t" => '')); // es6 [/ c0 f. M5 I0 U9 z( b z
- $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码 ' F% Z- G5 Z7 l! C/ g5 X1 W
有两种传递参数的格式,一种是数组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 2 Q; [! Q- t! P/ z( Y/ j, ?5 ]! }
str_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php
0 A6 ~( x. N/ ^% O - $ N4 L5 f" P0 r
- $str = "test";# h o. M# ]4 e: q: i3 a( t
- 0 K; k8 y' @5 l ?" S% y5 J
- $str1 = str_replace('t', '', $str);// es v6 k% i* ~% O0 J, G) }: @
- $str2 = str_replace('es', 't', $str);// ttt
! G6 h0 l8 b& K$ ^, G5 ` - # \, c& l8 T# Q6 W
- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
1 H6 P) h# W* C* ~) _0 K' G5 m - $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae! ?0 Q1 F9 P) r4 J$ X, [
- $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa- J, x5 b4 G! O7 `& D# W T) i
- $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
7 x, [( K. R* u4 R! o. w
/ B, H+ b* u4 E. I' t8 L: |- $arr = array(
7 ]2 m3 j. i0 Y2 y - 'a' => 'testa',
% N2 n( p7 `& k$ d9 v - 'b' => 'testb',
3 _$ y" ^' z6 S - 'c' => array(
+ i" Q3 }* h! \0 Y% O |8 A - 'ca' => 'tes1',
5 l0 T& F4 V- U( o - 'cb' => 'tes2',
) M) p8 x: [0 G: o/ {: \$ Y - ),) ^( J% z; Z( ]/ L3 E7 H. n
- );: ?" Y9 Q" K9 L0 c1 t
- " J: Q6 q- ^ i, @) P
- $arr1 = str_replace('es', 't', $arr);0 [, N2 e3 T( z w
- /**
: N4 q8 P% ]# I: C' x - $arr1 = array(2 f: _3 |% T+ i. x4 k0 _
- 'a' => 'ttta',6 q( ^) K9 t; h% E/ x
- 'b' => 'tttb',5 }! N) U, x: `8 {2 c
- 'c' => array(' H' {, Q* }/ ^1 Y6 Q9 @# ~/ x
- 'ca' => 'tes1',( r0 F5 R0 c0 y
- 'cb' => 'tes2',) h8 B8 ]3 `- b: L8 \8 `+ W ^
- ),
% O/ W% j: O/ \0 K; B - );/ j3 Q% {# U( n; G1 Z) _+ Z8 U
- *
2 G3 ?6 ~+ `& W# h - *
) S1 z" \0 S7 [4 \- W' g* ^ - */
复制代码
3 }0 f' G" W; H) ~: H) S& b% A+ J
C" C8 ]1 n" F9 `$ v" N; D
str_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
0 D- }" H, L" h9 Y; qsubstr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php) a1 ^: |. u1 l% p( h6 B, o
. o1 q% I+ @; a- M- $str = "test";, V0 {2 A4 k. v9 j! {; m, A( d
- ' {; G7 V; ~9 O
- echo substr_replace($str, 'zzz', 1, 2);// tzzzt( e" c7 K9 X+ x) C2 R$ K. f
- c* y4 u, L7 z
- $arr = array() G; J7 W8 R$ ^" I. V
- 'a' => 'what',& F3 Z( z, C1 Q! ]% G/ b( Y+ W) y
- 'b' => 'are',' y" o( G$ y$ @# f3 y V3 J% C. ?
- 'c' => array(+ i7 [* ^4 [' v8 f! @
- 'ca' => '11',6 k8 |% u! P7 [7 `5 Y d# Y1 L
- 'cb' => '22',
2 r4 C% @/ u/ |2 ~# {" L2 r - ),& @- D* j+ Z' U! d
- );# C/ R& G) d+ _* R+ X; w5 W! B
- " {% S1 h7 B( [& a/ c( F% U
- $arr1 = substr_replace($arr, 'ok', 0, 1);
# |; x! f* X- w" |7 X! ~ - /**- o: M8 @+ g0 `, D+ H0 W1 P5 L
- $arr1 = array(
* B0 E8 V4 a% H - 'a' => 'okhat',
+ H k- l7 S P0 U- n- j3 g6 z - 'b' => 'okre',
6 O' I9 Y" _7 ^; L/ x - 'c' => 'okarry'. N4 ^& Z9 u; B9 w# g6 [9 q' l
- );
7 H8 k* r4 o- |2 e2 o - */
$ `6 b& Z$ E; f& ?3 k4 M9 W7 c( O+ I
复制代码
6 a: g' e3 {& T; W7 i7 }0 c数组替换的时候,也是处理一维数组的字符串值。。
0 |8 F0 ^* z' J e* \preg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php2 K$ u I" l" j3 p# I; W( \6 M/ F/ i
/ t* b7 z1 ]. F G9 j, n; X- $arr = array(9 U j. _& z4 C
- 'a' => 'XXX25012349999XXX',// 不是以1开头
. X0 X |* v6 Z, z# L+ g& o0 \ - 'b' => 'XXX13188887777XXX',
3 {* s: n0 D l* U& g/ c1 J - 'c' => 'XXXX918811113333XXXXX',% f9 B( K' G1 Z3 l& S9 z
- 'd' => 'XXXX188111133331XXXXX',
4 P: ^8 R2 z5 ?, [2 p4 P% g: m, h - );
2 `! q+ r6 J1 `: E2 \; i P+ h1 _
/ n R& S% N, r$ ?- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
* B0 Q! w. }5 K7 i# s3 N; @ - 1 t+ q% e. Q, R+ d: F& C! k
- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
9 {6 ~6 h* O" ^. R/ v0 n
) b: _0 d% P% {6 a, M- /**: I2 V+ @6 n ~' J5 i
- Array
7 q# |! M1 k0 F+ }! T3 V. C - (
% p5 ?# G1 W7 K# x; E( X - [a] => XXX25012349999XXX* R/ |) `5 y, T; m. Y# j) j
- [b] => XXX mobile:13188887777 XXX
6 \3 I6 S3 \' f7 Q+ K( w; H - [c] => XXXX918811113333XXXXX* o) I3 g1 I1 D$ K' d7 s& t4 e: q$ @+ [6 L$ u
- [d] => XXXX188111133331XXXXX& R8 L# o+ ^$ o* H! o+ `! h
- )$ e3 _4 B s# C
- **/
复制代码
2 g, ~0 v! `( \& e- V+ l; {- w, ?1 k3 \; }# O0 a, e4 ~
|