|
strtr() str_replace() substr_replace() preg_replace()
' |9 O: e0 M9 C% S4 k- z Qstrtr()的用法: - <?php
7 a$ j% E0 y! ]0 [0 ^4 u u* M
) Z% w. m. q2 j- $str = "test";
! \, t; |' C8 K
6 q7 T' ?( x4 T' z5 A- $str1 = strtr($str, 't', 'z'); // zesz
# Y O7 b: T C2 G - $str2 = strtr($str, 'tt', 'z1');// 1es1# h3 z2 ]! g% T& Q8 a8 w% C' T/ M
- $str3 = strtr($str, 't', '');// test
+ N: `! s. B* X' Y) o3 Q - $str4 = strtr($str, 'ts', '12');// 1e216 c0 v4 G2 B5 |9 x9 Y
- 4 Q. F, g2 m& o( k$ o ?% E
& X+ Q$ ?2 Q. L% E- $str5 = strtr($str, array("t" => '')); // es; \1 L" h+ a/ A0 [# @9 z
- $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码 7 y+ z/ g0 h% C( @! q0 ?0 ^
有两种传递参数的格式,一种是数组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
9 Q. D% R5 b( M* j% G4 W' [& bstr_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php1 w: E/ P3 K1 v, p
- # [# w# o: F' u8 R3 L @
- $str = "test";7 p* f9 h9 ]5 [! W1 U; i0 b
- 0 a' S/ q" `+ a4 B0 ~ u; v& C
- $str1 = str_replace('t', '', $str);// es
4 @: D/ M% t9 @: b2 L) n0 M - $str2 = str_replace('es', 't', $str);// ttt
% e, n) a7 C3 _( o- C4 ~. r V
) B) |4 M8 n% Z( F c4 k) M- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
1 m, [# j( w# |: e+ a0 h3 @ - $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae, B- e1 B' n- |" t. S; q
- $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa D f( O K( a( l) j
- $str6 = str_replace(array('t', 's'), 'e', $str);// eeee: Z( f- b8 E* G" t; n, ~, j4 d
- - j% I& l. q( T \- ]3 h; ]
- $arr = array(
7 Y/ {$ z. @' V7 f# o6 Q0 e. H% U( g - 'a' => 'testa',
/ X2 b$ U2 ~4 B# _- N1 B: y3 E - 'b' => 'testb',
, A+ ^- U. f- n7 v/ m- q - 'c' => array(: J2 q0 V7 Y Z
- 'ca' => 'tes1',+ _+ m* F# j) n- G) R4 F
- 'cb' => 'tes2',: k* W F K) v% R
- ),
3 a# v0 I! {8 E: O4 i3 y6 U4 ^ - );& Y0 A7 ?- K# c% M, ?) n+ [. f
- 1 S$ O% s* \: Y
- $arr1 = str_replace('es', 't', $arr);
0 [+ ~: \0 k* I Q - /*** K! s. Z' f" e& Z- P9 w, n
- $arr1 = array(7 ?2 H: J9 i6 q6 d/ q
- 'a' => 'ttta',# T; M! `& f; V b5 {) K) @9 n
- 'b' => 'tttb',
/ ?. _; u1 {2 V. f - 'c' => array(/ }. D; @. }5 N7 y, l( Y3 w
- 'ca' => 'tes1',$ @' d6 W1 |/ J6 J7 r
- 'cb' => 'tes2',$ Y0 n4 U% ]% c* Q& c% Z* B
- ),
9 F3 F. x. F" D) c! h - );
0 ~! z( ]! s# O, V - *
/ k$ U# v. R1 _0 S r - *
$ S. `3 ^ p; s9 q - */
复制代码 ! y' D% `0 v. N; W k
; A0 _7 P, M6 G
' f5 n7 ~6 y! n. R+ y- P
str_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
, j e Z. C- m) {6 U0 W; `( Csubstr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php
, \- X( j' M& t' q1 N9 ~
6 h, H* W; H! ~6 {" P- $str = "test";+ m$ c( d1 O: k8 Q- u( Q; U) k6 s
" L7 s9 ]( x+ w5 z+ a- echo substr_replace($str, 'zzz', 1, 2);// tzzzt
7 } `8 j# \+ b4 Y& f1 j - 0 A2 D1 Z9 |1 ~: K0 `
- $arr = array($ Z- |' o+ J2 Q4 K* Z7 l2 }
- 'a' => 'what',
( U% l1 @) y K1 x1 T - 'b' => 'are',
q2 x, z# }$ {: e - 'c' => array(7 r; a9 ?! [; L2 f H" g
- 'ca' => '11',
$ L4 x! U# B+ h* @$ _: R7 e' C& r - 'cb' => '22',
: X7 `8 {% Q0 q" c' W - ),
/ O0 Q* ` z' s# ^. M( A4 P1 H - );/ C% E1 Q. J8 U; y. Q
/ ^# t" X7 S6 o: k( R1 W' u+ \- $arr1 = substr_replace($arr, 'ok', 0, 1);+ g7 @7 i$ G! f0 t
- /**
^; R/ S/ }6 b/ v2 A - $arr1 = array(8 s* a+ M- l% C) t' J3 w* |) ~4 I2 R
- 'a' => 'okhat',. O7 i. Z5 B7 e. F$ _9 n R4 T
- 'b' => 'okre',9 f& M& J3 F9 q/ }6 g* d8 h3 e& |
- 'c' => 'okarry'
9 A7 |; `$ m, } - );
! x) J3 v7 _+ N* X& r - */
) L* a& n1 y" R$ L. |
复制代码 2 [8 T% x7 L5 b
数组替换的时候,也是处理一维数组的字符串值。。 / E+ o8 }' O! j4 s3 S. t7 i9 X4 \
preg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php. I8 X$ O* A1 ]+ _% j
- ' {) q6 f* {. i% ^3 x* o
- $arr = array(
# d+ X8 h% s7 n2 A' ?+ o/ z) R7 C( @' V% ~ - 'a' => 'XXX25012349999XXX',// 不是以1开头
_" ?, E8 F/ t' V: ~ - 'b' => 'XXX13188887777XXX',' D* s) D3 M7 R! B) i
- 'c' => 'XXXX918811113333XXXXX',7 i c W/ k; b' s
- 'd' => 'XXXX188111133331XXXXX'," P! @9 a& S9 V r0 P( w0 j# X* V
- );
/ V0 ` g" |7 ~7 \# C8 v! {: O
6 a, j6 D( Y8 Q1 i- S2 k- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
) k' L, m+ ~( b U
% D1 `$ a; O R- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
( R/ o e5 \; z* A0 W! r
/ K( |. Z. L2 |" }- /**
. l6 E/ l1 {% g4 \3 M - Array& p K4 L6 T# S. b" ?
- (; e! k3 y8 m& P5 A0 S1 O/ a1 `% _
- [a] => XXX25012349999XXX
% D- N% i- \1 C# s+ q0 | - [b] => XXX mobile:13188887777 XXX
' ~ H; C9 G% { - [c] => XXXX918811113333XXXXX
5 {8 `2 h* _+ s6 a# g - [d] => XXXX188111133331XXXXX
% T( e7 M9 J9 e# T# n - )& G* ~7 U% E8 C9 @, t, T
- **/
复制代码
% `0 p- f$ p5 r6 e
2 F& E5 ~9 W$ ^, X+ U |