您尚未登录,请登录后浏览更多内容! 登录 | 立即注册

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15795|回复: 0
打印 上一主题 下一主题

[php学习资料] php字符串替换的几个函数

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
: k. E5 P8 x. z7 E8 a
strtr()的用法:
  1. <?php
    2 c" n6 H3 N. T

  2. 6 O7 s% `) E9 X& U4 A
  3. $str = "test";# x: f% B/ c2 }+ j4 ?8 |
  4. ( d, ]$ K( C! o  H
  5. $str1 = strtr($str, 't', 'z'); // zesz
    . M. T3 Z8 e, r
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1/ W( y. k& R9 m+ N6 [- x3 f
  7. $str3 = strtr($str, 't', '');// test* p: v/ ]& |6 @; u, F* V& }
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    & Q# w, I/ H7 z: ^
  9. # s  Z' k5 v3 p' m) I

  10. / G' M1 p5 m1 ~
  11. $str5 = strtr($str, array("t" => '')); // es
      T7 `6 @5 y: ?7 k
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
! |; x1 d% p$ P4 x# u. B
  有两种传递参数的格式,一种是数组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
& f* ?! F/ C: `- ]
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    . v. h1 v3 G) p6 \" \0 j
  2. ; h0 z2 f; e: Z; W3 X
  3. $str = "test";* x: K; A4 ], @8 \- g

  4. 8 l/ t, l4 X% P% f& B0 ]
  5. $str1 = str_replace('t', '', $str);// es8 I' V* A6 A1 h# d. d3 n2 j
  6. $str2 = str_replace('es', 't', $str);// ttt
    - R, N- ]0 R; O* h3 F# |/ x* j

  7. ( W  ?+ s. R+ f/ m6 p/ \6 z
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    " ]; I2 b1 F6 S4 B$ h
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    $ i/ U4 i% S# w- _
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
    " ], s2 }# J2 G4 Q' r3 T  c. `
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
      Q2 ^, f. n- A: h4 i

  12. 1 O/ M- ~7 z" A2 H: p+ d7 S
  13. $arr = array(; @' X5 T. x8 F2 r
  14.      'a' => 'testa',
    ; P" h+ K+ K% t' I7 [) \
  15.      'b' => 'testb',
    , n0 {: }' b! a9 f1 r+ S# h# I
  16.      'c' => array(
    $ t; I4 g# O+ o* d' k
  17.          'ca' => 'tes1',  X. W; h% d7 z* p7 `) q) \8 m
  18.          'cb' => 'tes2',
    # d) E% ]% ?9 d; `
  19.      ),
    " z0 r3 ]- e0 h6 y
  20. );' p! `- }5 S$ [  Y" `; A7 H. s

  21. & L- P, N( d$ Q9 j  d0 y; k0 [
  22. $arr1 = str_replace('es', 't', $arr);+ @% m7 x  H( |2 V( z. ~0 L3 Z1 x
  23. /**
    " Z: P, o" C7 o. K# f* S0 m9 p
  24. $arr1 = array(& A6 }7 D2 |4 Y+ Y$ X7 g
  25.      'a' => 'ttta',9 j# h6 p3 {0 G  B- z8 J/ i; e& O
  26.      'b' => 'tttb',- A; H0 J. S, h/ b! q
  27.      'c' => array($ O/ l# x3 O9 S+ N! A- s- r; }
  28.          'ca' => 'tes1',
    0 m+ C' K- V4 ?3 ?) z
  29.          'cb' => 'tes2',
    , L* z; i5 R% J2 {0 Z/ o/ ]
  30.      ),
    8 u& R' |; d3 b. H' w0 U
  31. );* w6 n' B" `2 N
  32.   *
    0 O1 {2 ]; j# q
  33.   *
    0 U6 b2 s' V' s; s6 U8 s
  34.   */
复制代码

. j& N/ d% y- B) \& c. V  ?) p; j- C) C2 b- ?& f7 I6 Q  x0 f* y
$ @7 V0 \: o$ ^
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
* \- x% H/ f, d$ S& @' n+ M
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    6 R7 O0 G' k+ F$ N; q5 M

  2. 1 }# x# A! Q2 `3 s; Y4 U5 O
  3. $str = "test";1 p/ o$ f! J- Q7 P% @

  4. ( {. U( q. f7 I. ~1 K$ u
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt( \7 {0 C) w6 @
  6. ; i# ?& y5 M4 L" t1 `
  7. $arr = array(8 U; Z" N% _+ R6 p( u( ^
  8.      'a' => 'what',2 d3 x7 S1 B3 e$ u  l. r
  9.      'b' => 'are',
    ! k& n& G3 Z2 h- m0 D7 O% z' Z  }
  10.      'c' => array(& J, I/ A, l' I  D) f4 p* U3 g
  11.          'ca' => '11',
    5 O+ `$ N4 C+ A" j& L3 _
  12.          'cb' => '22',
    6 c5 \, {& V5 ?
  13.      ),! {6 s: U' f; [( ?
  14. );
    ' ^6 N/ o8 n( O" N* L4 l. @; G+ ?
  15. ) j) w9 ^/ Z% I: z  z- B* z
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);5 N/ ]6 I/ |: A+ [$ s9 A/ m
  17. /**
    9 d+ b" a' J/ W
  18. $arr1 = array(
    % w( X0 Y2 x+ Z7 h/ p' H6 B
  19.      'a' => 'okhat',6 T8 }; T  W* f( [. u9 l/ a
  20.      'b' => 'okre',5 s# V: g$ Z# D1 T6 D: E/ _
  21.      'c' => 'okarry'- H+ s( }3 X& p% |  X6 x1 w
  22. );
    - E: [; u# L2 q7 E3 E; X
  23.   */
    5 _* Z! B: M) ~9 [5 I
复制代码

. T$ `. F% O+ T  `5 s& w& Y# s" K3 J
数组替换的时候,也是处理一维数组的字符串值。。

* ^% M1 e( I* p: b
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
    , G! f& q9 i8 R% Z! v! K

  2. 0 @5 l1 }4 z3 [# n- J; r) u% m
  3. $arr = array($ f! H. m( @4 m5 K& c; z5 U* ~
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    8 E; Q* C4 e+ [2 B  B
  5.     'b' => 'XXX13188887777XXX',
    ; u: I3 W$ M9 G) d; U( `
  6.     'c' => 'XXXX918811113333XXXXX',
    ) F7 I3 n7 T6 i0 }; J8 M
  7.     'd' => 'XXXX188111133331XXXXX',
    - b3 x& R) O! @+ \/ v3 m
  8. );
    ' c' x) ~" n7 S' ^. }' B" C
  9. ! r2 c. e- ~! d2 f5 b
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3- q  e; ]% U! i

  11. 4 S4 z+ |0 x9 G) ~8 B" d2 g+ Z$ R; Q
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
    , a; q6 `7 n' y- @! o2 z9 [4 r

  13.   }9 k, @( H9 N: V+ y$ j
  14. /**4 X( `/ l1 h: Y( E5 q* _
  15. Array. z) d; m) @# u+ v: q% K4 M& N% ~: \
  16. (0 [% B5 e% l( R
  17. [a] => XXX25012349999XXX
    / W" e! N2 W, h, Y
  18. [b] => XXX mobile:13188887777 XXX
    ( P7 A8 K$ B$ H# q( ~: q5 V
  19. [c] => XXXX918811113333XXXXX
    - F0 a* E4 ]5 j* {3 e$ X3 S( `
  20. [d] => XXXX188111133331XXXXX" Q- Y( C; b* A5 L/ n
  21. )% }# B: s0 e1 b! H& Q- R4 f; z
  22. **/
复制代码

) v* O' W4 f. @" b- g# @/ ]
+ |3 Z! K  z1 a; w6 ]; {
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 15:53 , Processed in 0.053576 second(s), 19 queries .

Copyright © 2001-2026 Powered by cncml! X3.2. Theme By cncml!