|
strtr() str_replace() substr_replace() preg_replace() 9 p% g+ j i/ v* `
strtr()的用法: - <?php
: g# Y% B+ z8 p: a/ G
" i; Y( G/ W1 a7 X: ?- k4 ]- $str = "test";
8 p! N `. ^9 _0 F8 G - * G) S3 f6 b' y
- $str1 = strtr($str, 't', 'z'); // zesz: l; Z2 K" _: D; t+ d. h1 F) M- ]
- $str2 = strtr($str, 'tt', 'z1');// 1es1
6 x, I! A9 ?4 {6 K6 N - $str3 = strtr($str, 't', '');// test
! R& v6 }7 P1 ^& h A4 d - $str4 = strtr($str, 'ts', '12');// 1e21* u$ X$ l" A3 n0 k# ?+ G
- & o$ g9 r y; `' {7 Q
- 1 f0 z5 C- Z( N/ f% \
- $str5 = strtr($str, array("t" => '')); // es# P3 y9 d7 w4 J) \
- $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
! Z' w0 ^: {, { 有两种传递参数的格式,一种是数组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 ) Z7 s# u/ d9 ?& r h% p J
str_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php" g, g/ x/ D* o: }% N- r2 }
- ' I/ |+ L! O. G2 U" _, h
- $str = "test";
3 K; M0 _5 P$ L) K$ U - : O3 g1 j s/ v0 S9 Z$ t5 ~
- $str1 = str_replace('t', '', $str);// es# @# j3 G4 f# ` Z
- $str2 = str_replace('es', 't', $str);// ttt9 P' [$ b' q v* C5 E
- 5 {7 `8 ]9 }) S3 Z0 t0 {. i6 q
- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb( A6 ?4 j0 O- `( r* s6 f
- $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae7 I+ Y6 y# l* }
- $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
3 C% U& g9 c! a4 `; Q) f - $str6 = str_replace(array('t', 's'), 'e', $str);// eeee/ ~4 Y: Q0 ?$ u: K1 \. p
0 i7 }* C+ c2 |$ Q' _3 l- $arr = array(0 [% ?5 Q7 ~7 F9 j+ ^. D- N- n
- 'a' => 'testa',% ]; S2 C- n3 p4 L
- 'b' => 'testb',
# s: T8 V7 |0 x3 M- J5 W - 'c' => array(1 y, Y2 N& s) |4 T+ U
- 'ca' => 'tes1',
: W) W8 l* r5 C6 i v - 'cb' => 'tes2'," O1 {0 T# O. ^) N3 }8 C) e
- ),7 C+ z, L4 Q$ K# T9 D8 ?$ C6 {( T2 M
- );
5 Q# D3 y% I/ A: {3 ^% b - ; B) T1 a& ~; d- P/ X( N
- $arr1 = str_replace('es', 't', $arr);
0 u6 W' W' s7 y: G4 H4 v4 p# e- r. u - /**, a V/ u/ ?9 e
- $arr1 = array(
8 W+ B! X1 X. U% {7 e4 m - 'a' => 'ttta',* Y$ l- V3 o9 ?+ z( E$ Q6 x
- 'b' => 'tttb',. Z1 u& V. U5 a
- 'c' => array(
5 x8 i5 C- E! D! W - 'ca' => 'tes1',
' V9 I$ w$ C9 a `5 W. z5 Y - 'cb' => 'tes2',
- V7 c. T$ R0 c$ P" e8 u x/ a - ),
2 R: a3 [. M1 R, m% S4 v) g2 X" G - );. w8 p/ `4 d1 f% Y& f% G1 B
- *
" b8 M; c2 b$ B! S4 B& x7 ~ - *0 A3 _& ?8 P9 I1 r
- */
复制代码
& \* c+ C% O3 V, L# ~# T# ?% i i5 H. U r
4 Z: h& n4 n% o9 q% Y$ n
str_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。 & a! Z7 } u3 Q
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php7 }+ j$ `1 e" z
& d/ g0 U* ?" S& g, ^- $str = "test";
; X# X$ w, U s* T& Z# a6 | - . a' K8 f( C/ J! \2 h4 Y
- echo substr_replace($str, 'zzz', 1, 2);// tzzzt
1 p: L+ X! q5 j1 ~ - 9 d% G9 V8 Y E5 G2 m. W
- $arr = array(
8 C; z( ]) N( h6 \5 Q8 w, [- ~ - 'a' => 'what',
6 [/ D M" @+ q# i - 'b' => 'are',0 R% u5 P- A0 y; e1 ]( j' {' d
- 'c' => array(2 \: g+ f# j6 b: `/ N% d9 d- \9 }
- 'ca' => '11',
. V1 k" c8 I; B' ~% \3 v4 U% J+ Y - 'cb' => '22',
! Y* B1 T6 V1 g* l2 e7 w0 Q! z' ] - ),
, g7 ?* |; F' k9 C( Y - );6 ?) K/ C5 ]( g/ x' H2 I* n
- 1 \8 ^; Y0 m* N
- $arr1 = substr_replace($arr, 'ok', 0, 1);- ~7 I4 q: q: V' I
- /**+ k) N! H' ^6 {
- $arr1 = array(4 b6 z' Z9 ^ z7 F1 q
- 'a' => 'okhat',) I5 { S1 y/ p- o$ K; e
- 'b' => 'okre',5 k$ c4 b8 g$ Y# v3 ^ @
- 'c' => 'okarry': I( ]* f) q+ I J! X# K" h; q
- );8 a0 C" W4 J& a8 b/ V
- */: S% H- o7 P5 ?% z/ {' Q- M t
复制代码 1 }# Q% y. r! `3 i
数组替换的时候,也是处理一维数组的字符串值。。
8 [) G- o# D( r# s3 }& wpreg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php; R# p$ c: ?* h5 t: u
- h7 z( P, R* \6 w
- $arr = array(
; g/ O! U6 Q6 x$ ~* a, c" u& y - 'a' => 'XXX25012349999XXX',// 不是以1开头
# a- _0 @5 o; ~, x - 'b' => 'XXX13188887777XXX',1 \7 a* l( f j4 @7 H
- 'c' => 'XXXX918811113333XXXXX',1 i6 F" i. N1 O1 M* O
- 'd' => 'XXXX188111133331XXXXX',% V8 q0 U8 l1 ~; g
- );) ?/ B i9 d' b) @( K6 C7 ?# W
B4 L: Y) C8 B1 c- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
1 A& ?8 D ^/ {6 t5 j - 2 _ I1 S9 w, C) F; {2 F
- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号! z) H" F+ N, s$ N2 A
: \: c a* P" z7 I7 j/ B: b- /**
7 d( D3 _, m/ C' ?, ?$ l - Array
& ?1 Y) ?& {6 f - (: T# \. Y% J' D# B: J' H) Z" h
- [a] => XXX25012349999XXX
9 U4 _/ b! p$ S- x8 ?, w - [b] => XXX mobile:13188887777 XXX* P$ d: P# A. a! P- N. A' r6 d
- [c] => XXXX918811113333XXXXX5 H9 Q/ \! i. z9 `' |# r
- [d] => XXXX188111133331XXXXX: m1 {2 r( G9 [3 j+ I: i7 ]' C. Y
- )
( d' D7 F* K n - **/
复制代码 - Y1 ?4 v: Q4 u! U0 K% c
: _; D6 j: H4 C7 m/ X7 X |