|
strtr() str_replace() substr_replace() preg_replace() % Y5 P" Z8 c! b' {0 l
strtr()的用法: - <?php
2 y, t$ c {/ B& [- Q; y
) L8 H- X8 x1 Q; z# x- $str = "test";
7 m! E: W8 M5 r# L$ g5 N; g/ g - 4 @+ k3 Z3 Q9 c" z8 Q" c |/ P% j8 L
- $str1 = strtr($str, 't', 'z'); // zesz
' j* q9 [8 C; Y) h+ v7 f - $str2 = strtr($str, 'tt', 'z1');// 1es1
6 P' {) N# M+ ]) | - $str3 = strtr($str, 't', '');// test
o5 }% i, ~- O - $str4 = strtr($str, 'ts', '12');// 1e218 t5 Q, g ^! N0 S. k& H1 w- C
- 3 @4 Q! {$ _" \8 Z2 O
6 E5 A( U$ _" S- $str5 = strtr($str, array("t" => '')); // es
# u1 b# T% \# v$ _( K% x7 L# W$ _) M - $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码 0 Q/ ]- j) e) m9 P6 ?1 C
有两种传递参数的格式,一种是数组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
2 ]* Q* p, r8 X E8 \8 Y. tstr_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php
; M9 g6 L4 e7 A; ~: W7 {
* b& j* O$ ]' e7 W# J1 l s- $str = "test";" c0 i3 o2 P% ?4 e
& H/ s$ f! k/ B+ e+ H& C& i: F2 J- $str1 = str_replace('t', '', $str);// es
5 i P9 q0 \7 f2 G c+ T, Y - $str2 = str_replace('es', 't', $str);// ttt; U- T" \! I8 c* K, Z
% q3 w0 R5 B4 N( `( n) z# l! X- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
+ w# w$ I/ `. W& L; p- \ - $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
/ w P, U# ~0 s7 S# T - $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa4 d8 k( P. h+ h. j1 d" w; R: D& q1 `% `
- $str6 = str_replace(array('t', 's'), 'e', $str);// eeee; {7 ~. |; ], I8 }( L8 n# g
4 m4 y- \1 [4 E# @- $arr = array(
, Q1 B4 W$ b: i* M3 b. ] - 'a' => 'testa',3 b* @# p3 ?* y
- 'b' => 'testb',
; o8 g" J8 o0 l! x$ U - 'c' => array(
- R2 u) ?0 D5 E$ W( j+ J" a! l& G - 'ca' => 'tes1',5 V- Z- s) b, D
- 'cb' => 'tes2',7 H0 A z& _" }9 t0 V' S) \9 i9 V
- ),# T$ a" b1 i8 K" |3 ]8 q7 |
- );( v8 F; e ]- A0 i [
- , S n6 Z; Y2 |1 Q* e7 {" r
- $arr1 = str_replace('es', 't', $arr);
. t: }, C4 o4 Y0 U) w! ?9 s - /**
# J |( J! \0 b1 R6 S( v4 [& D - $arr1 = array(: d. i/ h3 y- k
- 'a' => 'ttta',$ U, z* x/ g* ^8 m# c* Q
- 'b' => 'tttb',0 T* {7 d ]9 z6 u5 h1 x/ u" B0 h- \
- 'c' => array(- i. p; W- A# v3 x; o5 F
- 'ca' => 'tes1',. T" s" ]0 y3 ?, P
- 'cb' => 'tes2'," O: i$ I7 I9 P( d. g
- ),
3 H# S0 [1 ]% i' M( e, R( r - );4 b1 `' K2 ]) M$ F
- *
; I+ t0 i, E) Z) C. d - *
5 M' o2 |3 S1 R - */
复制代码 {( j5 F- Y* S6 o* _* d
4 f+ E$ e3 K$ P) C7 Z! ^- Y; c' I b8 K
str_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
1 {( o7 G6 C( D! Z# tsubstr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php: h; q4 a5 B$ d/ @
- 0 I3 n: H4 R! E3 k
- $str = "test";. ^8 t3 c8 k8 c" E7 m+ ]" @. ~; G
2 N/ A4 i' ]; X& R" e8 I- echo substr_replace($str, 'zzz', 1, 2);// tzzzt
7 P. m: q) V; ^4 ] - " ^* u- c1 Z: Z
- $arr = array(; T% H% w" T, \; j
- 'a' => 'what',
: M: P2 {' {9 P+ ~0 b8 g - 'b' => 'are',
* t" `# y" c( u" b9 t" X o - 'c' => array(
8 l) N$ `) V) U4 G4 I* [1 e - 'ca' => '11',
" H/ _2 z5 F4 ?$ B - 'cb' => '22',# |7 C4 W4 J1 @; m; _& f9 O( h
- ),
, O& a- @% P$ G - );3 @# F* N6 S O5 V6 [" Y3 J
" m# V" B9 q2 Y0 G) a0 @- $arr1 = substr_replace($arr, 'ok', 0, 1);
2 z& o) n; G E# V - /**; M) } w) d- L
- $arr1 = array(6 D) A( X; l$ z- l) D, b
- 'a' => 'okhat',
9 Q. m. W7 J `9 d - 'b' => 'okre',
" T9 a/ b/ N) i+ k - 'c' => 'okarry'% L2 R; z' k2 o" {5 m3 E
- );
/ F. W5 _7 N& r- w - */
4 X" }) @- ^5 p: U; V, U0 }5 j
复制代码 % L4 _) h9 a- |8 f" S( W7 c* o6 j
数组替换的时候,也是处理一维数组的字符串值。。 ; U9 \; y7 v9 l- g* r! z# R* q% y
preg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php
& Q" z2 h3 W1 m2 B6 i3 r
8 ^7 Z9 J9 R) v4 \- S+ m- f- $arr = array(, R) t0 u3 B2 t' _2 X+ g7 D
- 'a' => 'XXX25012349999XXX',// 不是以1开头
" l$ M2 W; W3 W+ M# x - 'b' => 'XXX13188887777XXX',9 Q, q* W0 m7 o
- 'c' => 'XXXX918811113333XXXXX',7 S# Z! t3 j5 H" u7 t @& _
- 'd' => 'XXXX188111133331XXXXX',
' D, g2 p2 D; h3 ~6 K - );7 f: X) m* O: x1 c
/ X) q8 W7 c( o- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
. s1 X% M* u' ?; j: N ?
7 x7 S0 Q, h( G) J0 ], e1 ^- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号1 R* ?7 g0 m3 B9 w* M1 R
- 7 S& {) G' B3 p! n' B8 v/ U: d. O! _* V
- /**' N5 v3 _7 I, C4 f
- Array; ^7 X) r( l4 j
- (( D7 ^6 D7 B* ^0 }
- [a] => XXX25012349999XXX
# ~; H$ @. o0 }/ Y" s. u; R - [b] => XXX mobile:13188887777 XXX( q+ q( s* B, o- h
- [c] => XXXX918811113333XXXXX1 \, N6 {2 p/ ~' I2 R3 n
- [d] => XXXX188111133331XXXXX
0 P2 R9 g9 P+ \* H$ \( K - )
# Y5 K3 k d+ P, y+ D, q - **/
复制代码 $ B# s" G2 b1 Q: S" z
- v. L4 r: k) W) [! {! S |