strtr() str_replace() substr_replace() preg_replace()
3 V- u# O+ H, ~0 U) N zstrtr()的用法: - <?php; e# S% F' ~. }$ @3 A/ l6 f
- . b# m, B/ T6 P3 y4 ~! ^5 W
- $str = "test";
( R' E, T3 [$ F4 S( W4 p2 l( p - & S5 Y+ S* N2 g3 o
- $str1 = strtr($str, 't', 'z'); // zesz
& ^6 m/ t8 h5 Q& Y& X/ f - $str2 = strtr($str, 'tt', 'z1');// 1es17 e( |; \# D: V: y) ~0 l
- $str3 = strtr($str, 't', '');// test: r; G% }) E0 k+ o# E) y
- $str4 = strtr($str, 'ts', '12');// 1e21
4 x0 Y& W- W3 D Z5 Z - & X. f% x- ?; `
- 6 X% Q0 D# P5 }( g: v
- $str5 = strtr($str, array("t" => '')); // es. t$ I& ?) X" n
- $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
- E0 v& y4 S: U4 Q n 有两种传递参数的格式,一种是数组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
* _& Q+ F! C estr_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php
! [ P! C0 K7 R7 w I4 ^
) ~4 i! P6 D6 B- $str = "test";. M. j2 e5 V2 Q: d0 s! @
" j, N2 m8 X ~6 h# `: N- $str1 = str_replace('t', '', $str);// es& U9 f/ T+ L5 G- X
- $str2 = str_replace('es', 't', $str);// ttt7 s& D- F0 d. f! ~
- ; \" I3 h, {9 s3 G
- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb, @. Y: _, E+ P: d2 \5 x8 z( }# g
- $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae7 @, N' m# l3 z6 m6 w2 `: H
- $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
0 k) Z9 w; K$ w0 ~# P5 R: c' b/ ]0 S - $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
' P. x* @( }2 O; o - 9 ?$ n1 a5 H% ^/ W9 l" d
- $arr = array(
6 B, ^- C, d }9 I- P' P) c0 A3 _ - 'a' => 'testa',
) {2 Y/ w* c: j1 h- C C6 y5 @$ h - 'b' => 'testb',
: `" J" M: e7 K. {0 N - 'c' => array(
6 p. _/ K9 A0 g; s' w* c3 h - 'ca' => 'tes1',8 R/ _. [4 s( c) A% V
- 'cb' => 'tes2',. g+ h6 K% I7 b" w0 \
- ),1 V& b6 q, K6 J5 m
- );2 s0 w5 Z5 M: x% K1 b( ^3 b
6 T% X( s; L$ v9 w$ {/ O- $arr1 = str_replace('es', 't', $arr);3 i; O+ }: j0 L9 T8 i
- /**1 ~" ?" s6 j8 w
- $arr1 = array(
" S, T% e, n) ?5 A - 'a' => 'ttta',# S T) m% V' [* x( a. l+ K- V
- 'b' => 'tttb',
/ l& m( k9 \+ W - 'c' => array(% m- @+ P9 j# S& a
- 'ca' => 'tes1',
2 C" F; { Y, t$ G' Q* ], f - 'cb' => 'tes2',
7 O( x" s, o. e6 q8 \- T2 s - ),# d! C) C9 x6 E. y3 S
- );8 o9 d% l# D- x& O1 S: I
- *0 U& _0 I- J2 k
- *1 z% N* R$ z, J9 J$ R H
- */
复制代码
# D5 p; Q+ E5 ^) j- s& A% c. \3 R! L7 ?* \1 n
. z' S- B' J5 Z: T) e
str_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。 0 \. a/ Y2 p/ N) J* A+ f
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php
8 w& H: {/ d+ ?( Q! f; R; ]/ m* |
; e0 K/ l( Q# G6 ^7 J/ S7 K- $str = "test";
" ]) D9 w6 O: l4 h
0 k: A X$ s2 f5 \# A+ Z- echo substr_replace($str, 'zzz', 1, 2);// tzzzt# \. k/ {6 U+ d6 M2 h" ^4 ]
- + h5 r( p. T9 G1 R$ R
- $arr = array(
: L, ?6 o' ~1 l2 A. x0 M4 q: J( l - 'a' => 'what',# Z' N/ e* n. h2 i8 R
- 'b' => 'are',' m C) N' ?: _: e- a
- 'c' => array(& h5 I% A' p7 q- a2 _) [: f) Q. z' V+ B
- 'ca' => '11',, ?/ G/ Q, S. J8 D
- 'cb' => '22',) n4 z* V& v+ b5 @; l" O
- ),
. v6 j! y2 c, q9 X c! }* r - );
" r% u8 `& k( `
3 U7 R+ n I4 F6 T9 `5 m$ Z- $arr1 = substr_replace($arr, 'ok', 0, 1); W" }5 E: e- L# q! S( h
- /**
; s1 }& L6 E, F( ? - $arr1 = array(3 o, t; O+ l; [# s" }' v3 x. s* s
- 'a' => 'okhat',
+ k; m7 ^3 y! C5 [0 j6 r5 [ - 'b' => 'okre',& J( O) T; y7 |% [( ]% d3 o T1 k) ]
- 'c' => 'okarry'- I3 E9 P. p. n L$ i0 P N
- );
' b3 L2 g& _0 p0 g - */$ Z4 U, B% y0 ^ F" T1 g
复制代码 - O' o- u9 H' W8 k8 d& g
数组替换的时候,也是处理一维数组的字符串值。。 5 S- |9 g2 k- {5 r
preg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php* x, t1 }9 D" c& k
6 B! c+ L/ f# |- C7 Y: l- $arr = array(
5 k: m2 Y/ q/ X& J - 'a' => 'XXX25012349999XXX',// 不是以1开头
4 c- b9 D2 s6 J2 Y1 x - 'b' => 'XXX13188887777XXX',9 J% p7 i5 q {8 D& D
- 'c' => 'XXXX918811113333XXXXX',/ F/ T5 r% _4 a0 g/ K0 d W& C! i
- 'd' => 'XXXX188111133331XXXXX',& j; K# k( L+ ~
- );( @. k2 ` m% P: o
% i% g0 }; x: G2 J2 H6 C* l- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
. W$ u2 c5 x2 n/ M# _+ v3 m+ r8 V - 2 z! C7 Y/ O S) U6 C; `0 N
- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号2 K! _* F& O- E: N
- + T8 R b8 y( V: \1 H1 y5 y
- /*** t+ g4 I' V# [; j
- Array
: H& p y5 V4 C+ Z# n. ~) \- d - (! i) Q$ J2 ?. e) g1 ^
- [a] => XXX25012349999XXX" @7 j. v/ e& Z! w& x6 Z
- [b] => XXX mobile:13188887777 XXX6 A$ s4 c y% y
- [c] => XXXX918811113333XXXXX
/ b _# Z; i& X - [d] => XXXX188111133331XXXXX, o9 M* h+ u) _8 B* p+ h
- )
$ U. b7 `1 C! O2 |1 l v8 J# Y - **/
复制代码 E& B, P' l8 |. w5 t x6 T
! n. t1 `5 X, t. m B
|