strtr() str_replace() substr_replace() preg_replace()
4 k7 h7 r- R( y Q K( qstrtr()的用法: - <?php/ [- t# T$ R; K' z' F
- . o# W, D. n X: B" i
- $str = "test";
, Z4 K/ N' ^# C) T9 w) d* |8 F - 8 k* k h+ y6 i8 R3 m
- $str1 = strtr($str, 't', 'z'); // zesz
3 p$ S# ~- b8 F, ]; ?# i - $str2 = strtr($str, 'tt', 'z1');// 1es1. W# |* @3 b$ C7 {
- $str3 = strtr($str, 't', '');// test
# A! z2 c8 _" E" T4 B - $str4 = strtr($str, 'ts', '12');// 1e218 f" ]# O7 i, l4 l
+ _4 a" N' R( ^) s- $ `0 {1 Z* B3 N& W. s6 e+ S* D
- $str5 = strtr($str, array("t" => '')); // es
8 z; Q e* ]$ I: L0 M2 \ - $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码 1 h. Q* V( v* u& S6 R
有两种传递参数的格式,一种是数组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
, I+ Z5 E8 `$ Y- Cstr_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php3 i( T9 \: }0 ~6 U
I8 H# A. c3 B; x' g& c- $str = "test";* ^* B; S6 Y+ W0 [) D# j, r2 i4 }' l
- 7 O6 ^" F9 m. J
- $str1 = str_replace('t', '', $str);// es
, {. o. d* h# o. T$ M6 x' _ - $str2 = str_replace('es', 't', $str);// ttt
9 w- @+ F/ f5 b" Y' i' ] - 9 a5 [# G2 t$ J0 x) X
- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb) N0 o, j/ j% i
- $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
2 Q k: W8 f$ d/ ^1 r1 f - $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
! t4 \; e9 B* [. d' B' H - $str6 = str_replace(array('t', 's'), 'e', $str);// eeee9 G; M' z2 L" n4 m
- 4 D$ r, c! q8 h$ n- |) j9 Q8 V0 h* k
- $arr = array(2 G+ q' a3 u% C6 A( {7 T! p+ f" c
- 'a' => 'testa',2 b% s6 Y; y9 v% F
- 'b' => 'testb',
, s: s8 R) S: `8 f- a1 L+ i* X - 'c' => array(
% [* Z) V }% }: E% _. `% j8 B* a - 'ca' => 'tes1',
& b$ l& U1 @ W - 'cb' => 'tes2',6 s9 m7 O9 c, P" [& q- Q8 ?2 K' Z
- ),4 E4 L* @7 e4 g6 m
- );
5 h- G3 _0 L; s7 J( M
' V- G; K5 L9 t1 R% Q3 c5 H. U- $arr1 = str_replace('es', 't', $arr);8 B$ P0 s# e! _5 d; A B8 r" T
- /**
( e5 Y/ N7 w/ ?1 ^8 A$ d7 t - $arr1 = array(% J# G* M0 ? |3 c. c
- 'a' => 'ttta',
! e) ~; k5 ?" w7 B+ s) B* m - 'b' => 'tttb',
9 W; i( D$ }; c+ s% l' ? - 'c' => array(0 q5 W( N+ `4 R4 }- B+ |
- 'ca' => 'tes1',- _* r9 j5 ^% D5 Y9 ~
- 'cb' => 'tes2',4 Q. X @2 \- F/ b: {- T
- ),2 `+ } y# D4 u' v3 K1 U8 Z
- );. b" _: C" \; A6 U
- *3 d6 ] X, J( B. A5 I4 l
- *! M& @' F* C- A' {. m. X) n% z1 U
- */
复制代码 # d0 e/ L2 Z1 q6 D6 }
. i5 y" L8 E$ z2 g$ A: `7 Z* e7 e
; P4 `8 A d' A" ^' Nstr_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。 1 `$ K) Z( k/ O! s8 w8 e
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php+ k; P4 B8 W& X' g3 Z9 j A" G
- 6 d C7 X2 i1 D
- $str = "test";) g* _9 A! ]4 w3 B
- 9 m- W9 |3 k( m( j- v
- echo substr_replace($str, 'zzz', 1, 2);// tzzzt9 z& b0 z- o* B( X h$ Q
- 3 i0 p/ a" b9 \ h a' t9 E4 K
- $arr = array() }. |9 C0 B- U7 C G- }
- 'a' => 'what',' c! x* e& b7 O5 O: J) r% R0 g; D
- 'b' => 'are',
; ~( \( E% [! A) M% Q6 E# F. Q% { - 'c' => array(9 S. V6 y6 @$ i# ]. R2 ^5 O
- 'ca' => '11',: y+ Q6 d* s/ ]* a9 j4 m' I! Q
- 'cb' => '22',
2 A. X5 d; B% N* a - ),9 u, G+ \& C8 {+ l$ K
- );
7 y! b8 Q5 [3 n) o$ m/ x6 C - $ T: A8 v* n, N& F, @8 K
- $arr1 = substr_replace($arr, 'ok', 0, 1);
0 z& c% s/ G9 o |$ Z4 D; t& K - /**
2 W9 ~. j7 d: p$ @+ S- g- H t - $arr1 = array(4 f8 l- g. N- V; G3 t4 s. N6 |. a
- 'a' => 'okhat',& S( o4 l7 x m" ~: f* x. g7 m
- 'b' => 'okre',
* P# b7 m& ?+ S+ M* Y8 ]" | - 'c' => 'okarry'. |9 `- B, t9 e/ ?) A3 q) Y
- );: L5 p# |& W& a. n: V
- */! \/ I1 V: A$ z Q; g2 O5 U
复制代码
! { ~ h; F% U. b数组替换的时候,也是处理一维数组的字符串值。。
4 P& M1 n. e9 s! Ppreg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php
6 K4 F1 r4 c% M - - I1 G, C5 ^, E3 r# i8 o; _3 \
- $arr = array(
5 z$ Y- z5 f ~ - 'a' => 'XXX25012349999XXX',// 不是以1开头
x/ x2 `- A6 {1 N5 H S* W; x - 'b' => 'XXX13188887777XXX',, x' {" p4 @" z
- 'c' => 'XXXX918811113333XXXXX',
+ F& u" d% J# e; ^% {9 m6 E# @" e - 'd' => 'XXXX188111133331XXXXX',, t/ W* d) b$ a* {2 b# G# }
- );
$ R4 d9 z& N! |$ M; X - " t q) z3 |- y% a* Q) C
- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
5 |# N$ i6 f9 f5 Q' v. y" w: `" F - 2 V& M; F- D7 q- N/ Y: ]1 r
- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号6 D, `% w I% ^4 U: H
- X1 Q: i& j4 Y6 C/ b7 T, j- /**
. E$ N6 p9 [+ N+ k6 ?/ J - Array' A( H u4 c2 [5 [% G$ M6 n- H
- (
4 H8 m2 g: ~1 Z# U - [a] => XXX25012349999XXX
) [0 J, r2 `7 v3 F/ L - [b] => XXX mobile:13188887777 XXX
1 p" u& v% J7 i/ T% | - [c] => XXXX918811113333XXXXX1 n; s/ O; t" P
- [d] => XXXX188111133331XXXXX
& P5 A, d: a% f' Z7 k - ) w0 n x6 p( D% z
- **/
复制代码 $ f: I x9 u7 u0 w2 _
0 X) a3 L0 W$ s3 ~, r8 x+ R
|