|
strtr() str_replace() substr_replace() preg_replace() 6 f) u8 _2 p" f7 w
strtr()的用法: - <?php% N/ G9 W" d# r; B/ X
- 0 _1 P8 X, V5 P [: N' M% k
- $str = "test";- i2 O- ?4 o$ h' g/ y. p
/ Y* ?4 s1 }. A, M! P4 ~- $str1 = strtr($str, 't', 'z'); // zesz
( u1 E" J5 J% |+ o - $str2 = strtr($str, 'tt', 'z1');// 1es1
) h$ O" Y7 |: D4 I - $str3 = strtr($str, 't', '');// test9 I. B( m* ?9 b5 B/ \4 v# O
- $str4 = strtr($str, 'ts', '12');// 1e21' q- m% F7 E. u( t
2 e0 B( D# L6 M- 6 R+ b( `; ?; G9 D" T0 C: I4 z
- $str5 = strtr($str, array("t" => '')); // es/ M" W/ l. A) N; X" B. |" ~
- $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码 ; w+ h( T" ~9 \1 n$ W( O! s7 O
有两种传递参数的格式,一种是数组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 b. g& L3 v4 u+ C7 y5 J+ w. t
str_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php
% S p: g0 y- M | m( B - : Q* a6 t9 \* t' V- k& W
- $str = "test";/ R3 y4 q1 C5 W! H
- * u/ c3 k/ u. E7 s4 g9 X
- $str1 = str_replace('t', '', $str);// es6 X8 P0 C/ V9 q& k. a. N
- $str2 = str_replace('es', 't', $str);// ttt1 S" p9 a- u8 }
- 6 U: p. h4 J2 y/ |: H
- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
/ K0 d* e3 j; |9 ^ - $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae/ q5 G* u* ~% s
- $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
: }0 j, z9 N* t - $str6 = str_replace(array('t', 's'), 'e', $str);// eeee7 s; M" h2 p9 S5 v' r' U; c
, o: t4 G- E" s1 ^& U. S. m$ n- $arr = array(. t) Z B( T8 j4 M+ h/ ^' S4 b
- 'a' => 'testa',* l% I( _5 ]: X: ^! z0 X6 u- s
- 'b' => 'testb',
U" D2 @9 J. f9 n/ L - 'c' => array(
4 r5 c, w. Y' y2 I* q" x - 'ca' => 'tes1',
; n' z9 H/ b2 d - 'cb' => 'tes2',5 r. f* v( U2 ~! h9 n
- ),1 d4 D9 c1 l8 j4 g6 N7 q( Q; E
- );( K* K4 j' u# h# G4 m- x
- / ?* W5 c0 b: u5 D
- $arr1 = str_replace('es', 't', $arr);
/ `. I8 T# H3 S, O' m; s - /*** c; `5 g" Y/ ~5 V8 Q
- $arr1 = array(
) V% [% g$ G4 F2 b( {' K( S - 'a' => 'ttta',3 }3 ~9 r$ x; H/ U5 k7 r
- 'b' => 'tttb',
: f, v9 h+ ]3 e: O - 'c' => array(0 d+ y9 M8 `% y* J8 t' p# _
- 'ca' => 'tes1',9 r1 a. F% F3 W! D) F
- 'cb' => 'tes2',! L' I* A5 Z5 k4 g
- ),6 C& l$ C6 ]; ]
- );
( n5 D8 Z- b3 U) p2 U q& ` - *
, f7 m$ _* i3 K, l, w. N$ N - *, ]* Q" U5 P9 _) i Q. S' t0 ]
- */
复制代码
( t; {! u! C: X( f. J) ~
3 s" {; H7 U; M, u9 d8 s. @. Z4 Q2 x. s7 w$ D
str_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
; W* t2 h8 w7 J: X. L# ^# lsubstr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php
$ W5 Y5 b6 V- d* X) S* C - 9 m" | H1 H6 `# P7 O- x- E( L
- $str = "test";# P+ P& n( E& T; g9 y* x" n8 a
2 ]2 `" J8 m0 M, _- echo substr_replace($str, 'zzz', 1, 2);// tzzzt
& ^5 Z0 V- e+ K4 g
+ X$ d# g0 ^" I" q( E# l, P- $arr = array(
) t, X9 G3 ~: t5 Y - 'a' => 'what',* @* I* O" n* D5 ~1 o1 v
- 'b' => 'are',
1 S, {, U( c1 V& _' U - 'c' => array(
1 C" n' ^- m$ v2 b/ u0 Q- P - 'ca' => '11',/ Z" I& I! N! i. c
- 'cb' => '22',
# R+ e4 }/ k, L+ L+ Z5 Y8 P+ G - ),
9 J/ x0 D4 g; l - );! R# \% R3 a1 A. G! s3 x- s
- # V& I, R/ A& T
- $arr1 = substr_replace($arr, 'ok', 0, 1);6 b9 k' a' o/ p! E% q i1 s" g- k* H, O
- /**
: _8 [( u6 Q6 t - $arr1 = array(
: J S$ Z4 C+ b, T - 'a' => 'okhat',
& p4 t, p" N }& r - 'b' => 'okre',! x6 R2 g, \# Z* W" t
- 'c' => 'okarry'9 P+ _# s$ r4 k5 K0 T) `8 u( j
- ); K: t& |6 I* Y5 D9 m
- */
: {- [3 B0 W# L, D! p3 N5 h
复制代码 - a$ a3 k1 w+ ^. J
数组替换的时候,也是处理一维数组的字符串值。。
; V: I- B7 @$ d) d1 ~4 U9 [preg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php
* J/ l1 x2 c: R" }7 `7 i - 2 l4 s1 t5 J1 W3 a. C' O4 e
- $arr = array(7 |6 ~) `2 t- a( `
- 'a' => 'XXX25012349999XXX',// 不是以1开头
) W8 Z% l- T% b - 'b' => 'XXX13188887777XXX',
0 t5 x8 ]; Q) {( N - 'c' => 'XXXX918811113333XXXXX',7 }1 o1 W3 x ]8 P$ t$ F4 N1 {
- 'd' => 'XXXX188111133331XXXXX',# f& g2 A; ^- x* c! Z# [: t& y
- );
' ]4 ^$ ^+ N7 K) ` E
7 M4 U* u( ?/ H3 w- z, n; r1 y8 h- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3- ]. V9 _6 t; a( @
- ; P" ^0 }# n4 K$ A9 G8 [
- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
, V, d! m: o% f& e3 b6 E' \+ K; w - 1 U3 Q9 }# ~; n2 K; x. U6 J
- /**
8 P7 t9 B5 X! N7 N5 j - Array
* u: T% X# f: n; N3 n; N - (! K0 S0 g( ?2 } a0 _6 A& q4 |1 u
- [a] => XXX25012349999XXX$ Z* U) O; l& K5 {: k; M, }
- [b] => XXX mobile:13188887777 XXX8 X0 v3 U: x& r
- [c] => XXXX918811113333XXXXX
$ b% ^# f* k7 w/ }# T6 M' b- ~! h, Y - [d] => XXXX188111133331XXXXX
7 I; T% k4 p [$ q- K - )2 M$ t3 I- ~4 t. V! ~
- **/
复制代码 6 S4 V3 H7 K( U
1 h2 {5 `* Z5 e& k1 ^2 O' i$ r |