|
strtr() str_replace() substr_replace() preg_replace() - i+ e* q* {, m8 \5 M! i C
strtr()的用法: - <?php
( J7 Q a8 M1 K
& n$ t. a& ] k. K- $str = "test";* e* M r4 O6 C9 {: J4 Q2 L {5 r
, {5 D t1 t/ W& b0 g- $str1 = strtr($str, 't', 'z'); // zesz
& M5 p1 Y9 P' \2 [) {3 ?- H9 I$ x5 o - $str2 = strtr($str, 'tt', 'z1');// 1es16 @9 Q: b3 I0 \4 Y6 O, z. @
- $str3 = strtr($str, 't', '');// test+ q- i: u$ U* N) [2 ]8 `$ t
- $str4 = strtr($str, 'ts', '12');// 1e21
9 f$ B; `, C" X+ v& d+ g* c
8 P( Z! J0 @" ]! F. G/ E7 L$ Q
2 ?+ \9 G0 h4 M4 Q& x/ ]& w* E- $str5 = strtr($str, array("t" => '')); // es" g/ k) o5 e2 l$ P$ V
- $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码 ( H6 B) a" l4 h; w* V5 O, X; E" s
有两种传递参数的格式,一种是数组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 ) P# D$ o& E7 p1 n1 ?5 w
str_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php
, v6 B! w; Q d% s# ~
' `2 z, m0 D' z$ q2 S- $str = "test";5 q, Z" ^; D! ~
- J" J8 T! Z3 m) C, _- $str1 = str_replace('t', '', $str);// es7 ?2 J' \) p: G
- $str2 = str_replace('es', 't', $str);// ttt; d# K8 B$ ]7 w) u
- 7 L% y/ s7 ^9 g; U2 V1 `8 U
- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
$ W9 V# l; U- @& u- @ - $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
! Y. v6 `6 r) w* ` h% h+ d - $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa1 b7 x; `5 E) O: O" @$ f
- $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
! ] C8 c: ] r - + z0 M' K9 S; F2 j
- $arr = array(# s4 Z7 y( G' Q2 {/ \+ {
- 'a' => 'testa',
) r3 u w! ]& e E% O# Z& H2 n - 'b' => 'testb',
0 F& n, a- C6 A$ |. } - 'c' => array(
: l" K# W) Q8 w. |9 B3 ^) @9 y6 z - 'ca' => 'tes1',$ K: v- I# E3 ?" O; y* i
- 'cb' => 'tes2',
0 x( z. ?6 c0 {% H- b) v( _, @ - ),
. ?" X' ~8 i% f) L% I8 P7 }; i - );
; Q2 P- @: I M5 e - 8 U4 [! A3 V: s0 c+ p; M' |
- $arr1 = str_replace('es', 't', $arr);
& k8 Y& k2 m: d* P, e9 P L - /**7 ?/ B& ]( b$ g; F' R3 O3 N
- $arr1 = array(9 c/ H4 _( \, D! v$ ]' w2 g
- 'a' => 'ttta',
8 z! W# p: c3 p2 l: n& a - 'b' => 'tttb',7 ^+ N4 `, [' M& H- ]4 L
- 'c' => array(% d8 ]$ M& h. L0 y
- 'ca' => 'tes1', w! L0 ^2 o' @+ C) [; f$ i& \: Q8 U
- 'cb' => 'tes2',
7 u( [, L8 E! U: ~* x* ` - ),% D4 R$ e/ ^6 c
- );4 Q& h7 f( Z8 S2 F5 u R4 k
- *
: M# |8 d# C3 v! n4 Q - *
3 C* A9 F2 M; j C+ | - */
复制代码 , F* v k2 h: I% ]
/ u( |5 w3 i+ H- H# d; @) K
- J3 _5 U5 Q, V: ^2 e( J, nstr_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
: Y2 k4 T$ L5 e% s' esubstr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php
7 `, m! l1 K& y/ i8 h( W: i
/ p; ^1 [( A5 h' v, z8 L- $str = "test";+ ]% v0 |' l9 \) ^ Q* g* Z+ L
- # H9 b2 @3 |8 {
- echo substr_replace($str, 'zzz', 1, 2);// tzzzt ~5 E- ?& d- j0 I+ y! A% _
, q q3 l# R/ m4 }$ p* ?- $arr = array(& }, r' z3 K$ h
- 'a' => 'what',
- v6 b4 ^5 M0 Q/ ^# C. x - 'b' => 'are',
! n8 t, Y. t ~ - 'c' => array(
! v1 ^2 y+ r8 r) A) { - 'ca' => '11',3 ?/ B4 |* B7 d" D
- 'cb' => '22',! ^7 d4 C' b5 X1 N9 m
- ),
[* P( x3 P4 T- b, H - );8 o- v' @5 R. [5 R8 v+ J9 o# a R5 Z) O
- $ o3 C8 G9 t6 @+ z
- $arr1 = substr_replace($arr, 'ok', 0, 1);$ I4 U$ F e# Z7 [3 r, g
- /**
* e/ s# `8 N+ p/ Z& k' A0 T - $arr1 = array(
0 D" E8 R7 F. N - 'a' => 'okhat',% I8 `7 A# t Q" T& `: ~
- 'b' => 'okre',
' ?* J' u/ i0 ~) j. _6 Q$ u, ]5 P. s - 'c' => 'okarry'
9 Y1 m w$ |8 Y+ A' J: { - );
0 B4 _& a e4 D- l! s" @9 H - */6 J% Q- S* i0 D; h5 l
复制代码
* I3 V4 B1 f2 b- o) A+ |! o, Y数组替换的时候,也是处理一维数组的字符串值。。
5 e) |7 b# H! |+ Z% Tpreg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php
4 g$ |' r9 M+ G/ m) Y3 Y, M - * Z1 N2 y% P( t4 c, A6 K1 I) u# c
- $arr = array(
2 _0 X( @$ k- u8 h1 ` - 'a' => 'XXX25012349999XXX',// 不是以1开头
7 R- D" J& B2 a8 N( z4 I - 'b' => 'XXX13188887777XXX',: H4 U. y$ ^2 \' ~2 t! h4 J
- 'c' => 'XXXX918811113333XXXXX',
0 V. @2 p6 j( x - 'd' => 'XXXX188111133331XXXXX',
: e0 `: e8 a& t. F, L) V - );1 f2 q- Q$ H% E0 Z
$ M& Z2 t1 m2 L: U! w- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3! }/ t; e) M' A5 j" X6 O
- & h5 i2 E6 ]0 z$ Z
- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
7 P+ z. O, B/ |/ Y; W+ p# h
+ W# L" q9 o% e$ c% K- /**
- B0 x1 b) z' H2 r2 b* [. b. R - Array: ?; v" E; a2 i" s2 k' r
- (, d" W6 N* v1 d7 z M
- [a] => XXX25012349999XXX
6 N1 H5 Y! s$ z5 m9 y - [b] => XXX mobile:13188887777 XXX
6 o% x. t& Y7 G9 m9 s: W - [c] => XXXX918811113333XXXXX
+ y5 l- m3 z% u* F; A - [d] => XXXX188111133331XXXXX
! {$ |, T8 `& p9 r/ l) a - )! U. b2 u: t8 C" y' I
- **/
复制代码 + x) X4 p+ v! K0 Y; D- Z
! p; R, P) U$ |: L
|