|
strtr() str_replace() substr_replace() preg_replace() 6 y6 q1 u& h6 `2 _
strtr()的用法: - <?php
% _# I* ~0 R+ x4 I- ]8 { - 3 v8 \& E. Q' T) e+ g
- $str = "test";# ^( N" R5 w- K. r* a0 I
, Q/ M* ~0 d7 c" U) u- $str1 = strtr($str, 't', 'z'); // zesz
. G# S; u9 ^5 {/ ?' U3 Z - $str2 = strtr($str, 'tt', 'z1');// 1es1
4 Y8 _8 R( \" U/ i* K& V1 ]5 L$ b9 Q - $str3 = strtr($str, 't', '');// test
) ?3 L8 k. z+ \) J) {$ ^ - $str4 = strtr($str, 'ts', '12');// 1e21; U1 `. Y& I! _+ {; F% Z# P9 u# S
' D" v1 I6 _, P- 1 X% Y) z n- I6 @& P H. M
- $str5 = strtr($str, array("t" => '')); // es
% C4 P" i0 J$ d5 X) M/ d - $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码 & J( ~% _* t5 w# _+ {4 ?$ U
有两种传递参数的格式,一种是数组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 . B7 H3 D& O n
str_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php# B h( S4 L3 W3 d
- 8 C w- P! [7 Q+ e9 a
- $str = "test";( u( g0 e* R9 q7 N# g. o
_7 H/ x# Q. K, i1 f- $str1 = str_replace('t', '', $str);// es8 c- ~7 v1 l1 [/ B6 ~8 n: e* N: I
- $str2 = str_replace('es', 't', $str);// ttt
# `. |9 d' x/ T5 J) _/ G - ) c& U% t$ r7 a! ]$ n
- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb0 a3 z# ^* d+ o9 I; z( m; H, `
- $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
% p5 f8 x1 g2 M- ]8 \2 [9 N - $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa1 X5 m3 S: I# B1 y4 u
- $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
0 j3 u- L* x/ z! c5 _
' t9 n4 j1 j+ F" ^4 K- $arr = array(
5 h6 W t/ W$ j# o2 x - 'a' => 'testa',& C$ ]( p: o3 B' g$ x* C; U3 `
- 'b' => 'testb',+ e9 Z4 S9 [7 S {( C* Y
- 'c' => array(3 b7 u! C9 m X- ?
- 'ca' => 'tes1',& t/ E; v1 d& t" s$ Q J
- 'cb' => 'tes2',
4 o, S- q9 C/ t: h - ),8 ? v) [# g& q- e" A3 {, O' H$ M
- );" g# H- G, S- R9 s/ J6 g$ f
7 V- A( G: o8 |- $arr1 = str_replace('es', 't', $arr);
/ a7 _- A e- Q+ o/ o - /**/ X- R3 t- P) M; X; y
- $arr1 = array($ b" e8 `% k7 G6 H0 A4 f
- 'a' => 'ttta',8 w0 {* L# i V- P
- 'b' => 'tttb',
0 N. E' X: d" e6 v0 |% o. \ - 'c' => array(5 M; Q" r5 b! M
- 'ca' => 'tes1', G& @* V; m1 s2 p% T5 \$ L
- 'cb' => 'tes2',
, M& j2 }% `0 z8 w" H9 G - ),
- M* _+ A; ~# A: ^& m: C/ n7 x - );/ \4 s- i4 ?; R3 d) t0 ^) K8 |
- *
. d# h1 S. x* \1 c6 d( [ - *
' |5 y% f% ]" A - */
复制代码 " M x+ s5 r8 p2 m! P
+ u+ f6 i8 c0 t( V' r* `; z
9 N8 M8 |6 t. P. ?2 h, L5 Z% Z5 F
str_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
( `! m, m: E, R8 d; H( O" j: {substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php8 T% r" D9 |+ }: q
* X8 c) ^& U8 m! B, i. c! K- $str = "test";
" V4 |/ E' U4 f3 b$ a" G4 g - d/ k2 b) D8 J8 g
- echo substr_replace($str, 'zzz', 1, 2);// tzzzt
( T. a4 f* B" V- a+ C" |
/ P$ k( j& N2 g Z! l; T" a- $arr = array($ A# |6 g1 y4 M2 ?7 d- {/ |
- 'a' => 'what',
7 ~ w! V3 F9 ]4 L - 'b' => 'are',
2 K- t6 O+ m/ [9 s. a - 'c' => array(
: {( s3 h8 d5 m - 'ca' => '11',
% y% [$ R' j8 x( Q - 'cb' => '22'," M- ~5 ?+ q$ a! R5 h& `# r
- ),- d* z0 z( }" U" o% k
- );1 O9 M6 \: ]% s' \
. m, t" _7 N: x- H. J- $arr1 = substr_replace($arr, 'ok', 0, 1);
3 r" Q$ B/ C& _& O! X - /**
% T* I. Q$ o3 L* P& l5 M - $arr1 = array(7 d1 g/ Q2 f$ i0 P$ {* f9 N
- 'a' => 'okhat',1 k4 o( b& z/ r
- 'b' => 'okre',# M5 x0 Q# j# M3 v3 O0 K
- 'c' => 'okarry'/ V0 L* Q; f9 p3 \ c) t% [
- );
! i1 \1 M# c f T. Z - */, H1 X5 w# B$ y" X5 y' L
复制代码 - ] G( z& _2 q9 A; e+ m7 m
数组替换的时候,也是处理一维数组的字符串值。。 0 ?) d; P; A! @! m) d
preg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php
. z- y P1 u: E/ y) C4 d1 m; `" M - 6 r0 _4 k) S8 ]3 ?
- $arr = array(
, C# r6 W9 [: ^6 _ - 'a' => 'XXX25012349999XXX',// 不是以1开头# l4 U, L3 S; K, l5 l: S
- 'b' => 'XXX13188887777XXX',
; v5 n- t- r; |0 E1 k5 H: d - 'c' => 'XXXX918811113333XXXXX',9 g4 }. M* Z% O3 _: u
- 'd' => 'XXXX188111133331XXXXX',
; U. b: J$ G. s! g! z- G7 e5 Q$ v - );
! \- S& s) G* K4 q
# y. x8 m. f1 g; e. k8 ^% e- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$35 Y( L! ~; f% a6 n+ D2 W" N+ b
- , v# ~3 e+ j. V4 G
- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号2 l- {3 v t, H% k0 `
- 1 u, D0 m! D* g
- /**
$ u0 n; Y Z0 k) v - Array8 o1 x8 \( C8 C9 d a- H6 Y/ L
- (
* o! w* T. v1 b/ K: M& Q2 V - [a] => XXX25012349999XXX g# N7 d7 ^2 k3 Z/ @6 P; [
- [b] => XXX mobile:13188887777 XXX
" O8 }1 N8 F, Q# L& D6 A - [c] => XXXX918811113333XXXXX/ J$ G! V- b: \
- [d] => XXXX188111133331XXXXX( O* S/ H* {* T/ h
- )7 H' X) ~- n; U, \6 c' l2 h( G, f
- **/
复制代码 ) a. e. w* a) W8 H$ c; \1 j6 f3 {
+ | \! ^/ J% a |