|
strtr() str_replace() substr_replace() preg_replace()
* z$ x0 }8 u' M# T% Gstrtr()的用法: - <?php9 X( M F! a0 w
- , ]. \) B8 P, g- F7 A$ f
- $str = "test";- \ [( _4 ?6 D$ E! m# ^% e! Y
- 6 L4 ]+ t9 s- j2 m5 c
- $str1 = strtr($str, 't', 'z'); // zesz
5 V- I) M* d" E; `: [# B- x - $str2 = strtr($str, 'tt', 'z1');// 1es1
" {3 O9 F) W3 y; P5 s - $str3 = strtr($str, 't', '');// test
7 h6 H* Y- P6 M* c; s t W9 q% N - $str4 = strtr($str, 'ts', '12');// 1e21
$ ]( A$ j7 a4 f/ ]
( \( g q; X( m+ R* L
; W7 V2 b8 D/ `, h0 K- $str5 = strtr($str, array("t" => '')); // es
& _+ |$ s- i/ ]0 S" e3 _ - $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码 $ E, Q- G! m6 j6 x% 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 4 t8 H4 J8 L$ o
str_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php8 c8 b+ I( Z% t1 z; X# G0 a. o
- + |+ B( @+ C$ X
- $str = "test"; T2 H- X( L, \3 \2 ~9 k
- ' g( Y" ]# H$ G* i7 L/ L3 a
- $str1 = str_replace('t', '', $str);// es
8 R: R+ w3 N' {) j - $str2 = str_replace('es', 't', $str);// ttt; O0 u. i. D. Z
# D, d! y! K% R0 e9 J- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
8 Q8 T8 w6 L- |4 c - $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
" O+ Q; A" S3 F. R - $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa' f! y$ T$ J: I4 S" }5 b7 w! D& l0 ^' u
- $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
. R( l' c1 F$ B- S - ( g! R( u0 ]! \, s z8 D4 e
- $arr = array(& }! x0 a+ Y1 j- I
- 'a' => 'testa',
+ L, U. A; N$ s4 V# b3 |8 ^2 I - 'b' => 'testb',) |( t( A( i$ \. r
- 'c' => array(
" n6 V" P/ u6 g$ t& g9 t - 'ca' => 'tes1',& l# z# Q: s+ f9 A5 _0 A
- 'cb' => 'tes2',
2 T1 Z& O$ c$ l1 e0 A) d - ), V8 K' w2 R5 a5 d N% |
- );6 \4 `# E( ]2 D7 B2 J' A
- & x, q M2 B5 S- ^6 b% C
- $arr1 = str_replace('es', 't', $arr);
0 |* j9 L3 k U W7 m - /**
/ a5 z% X! t: n! {; w% X; v - $arr1 = array(
$ C9 l7 v9 T! |9 v0 a5 V- L, U$ Z - 'a' => 'ttta'," Q3 c7 N& M5 i, W/ g
- 'b' => 'tttb',
/ K# s% I# N$ O - 'c' => array(3 |8 g2 O" r: w/ e( u# N
- 'ca' => 'tes1',9 _' m0 I0 [. F
- 'cb' => 'tes2',! A. O7 r! u% ^5 Y4 y
- ),; r3 Y* ?% K2 h7 i; L' B) a
- );1 W6 L5 k9 j4 m7 ?4 }/ y
- *
) h! Z/ h! s, h9 `! v+ Z' H& F8 z: F - *- \8 [9 r* a+ \9 E, p' x3 p# U* u
- */
复制代码 1 m- U. t; R$ _; v/ I; g2 `
! }( o2 X8 Y# ^, e/ {
4 ~) Y6 A" t U. d# Q
str_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。 / j1 P& H! z0 r7 b9 y" ?' W
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php
0 b: H: h$ _- F9 J1 ]1 |0 I
2 {) _2 {" Q$ C; |. E) Y- $str = "test";+ T' n0 Z' n* N4 n0 Z
- ; H% j" N" m* p# H" o/ H! i
- echo substr_replace($str, 'zzz', 1, 2);// tzzzt/ h+ v) P/ k+ C8 B- o
" B% L( e( y' m) i3 j7 Z- $arr = array(& O" b4 B4 Y9 \0 I
- 'a' => 'what',
# @& g, T1 c! A - 'b' => 'are',
* A2 k2 h) [( I2 E* _ - 'c' => array(% D, d: {$ k: w2 X, V
- 'ca' => '11',# O8 M4 G+ }4 b* Y
- 'cb' => '22',8 D" }, w2 X; P+ j& ?! ?& x
- ),, N9 s/ E8 q3 e
- );' ]4 U, W' t% v- I3 Y, D: h
% \" T( ~* {8 V" I- $arr1 = substr_replace($arr, 'ok', 0, 1);
/ {* G) h( I. L1 F4 x - /**
* m! s' }- y; ]3 v7 s4 \( z2 k9 D - $arr1 = array(
/ g6 D5 S6 M4 V& x1 E' R+ A - 'a' => 'okhat',- s1 @$ s( r3 y$ O' ?+ |
- 'b' => 'okre',. S/ z3 R0 ]1 f; {" Z+ }0 Z
- 'c' => 'okarry') K& ^, K4 \, p7 O& b3 ?' K
- );- n* p' A3 }0 m; O0 e" w; v3 C d
- *// O: B: @; E. V
复制代码
; [$ B+ s% ]/ n$ U5 n数组替换的时候,也是处理一维数组的字符串值。。
& t: w) a6 W5 ?: X' K! vpreg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php
5 \4 b. G' M% I4 E - : c8 [" u# H5 p( Q, a' P4 ~5 L
- $arr = array(
: l* P' k3 h; {+ n/ x2 V1 b - 'a' => 'XXX25012349999XXX',// 不是以1开头
i! c( {" c, c$ m& m" m1 } - 'b' => 'XXX13188887777XXX',1 Y1 _" x) U# r5 b7 a4 Y9 q9 L
- 'c' => 'XXXX918811113333XXXXX',
6 H! g+ j9 b$ W- _ o - 'd' => 'XXXX188111133331XXXXX',
$ s9 \' U! h2 z' ^- ^( I - );
+ [; F9 ~* H; [) X2 S! r
2 }6 u+ t/ o$ ~+ l. e5 e9 Q- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3* E2 e1 | f; X) o5 @- M
: d) G2 H, }' Q2 q- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号; A5 K6 g5 U4 R" g8 \2 ]6 b+ k
0 v8 F% F& N% Q$ |- /**) z6 r: ^1 \* C( N3 x) z$ K
- Array5 y& d! X. `+ |0 O% V
- (3 c( E( p0 K H0 B9 ~7 Q4 \
- [a] => XXX25012349999XXX
9 D' Q1 {$ u: B( R7 o# E8 G - [b] => XXX mobile:13188887777 XXX
+ {5 q! G) j% y, @0 g - [c] => XXXX918811113333XXXXX. [% d) R, o1 {. `
- [d] => XXXX188111133331XXXXX
% Y! O% Q' N& T. ? - )
5 v( D# Q2 g4 o. N - **/
复制代码 - B% o$ m! a5 i( d5 O' u+ n# m
$ X8 {$ h: G) L _; E( v, y( D
|