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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()

' E" K$ f2 U3 [8 |
strtr()的用法:
  1. <?php
    " Z( g5 P$ k. k# s) L7 S" d7 @' }3 q  T
  2. # H3 X8 A0 e+ B! `5 D( F  w
  3. $str = "test";
    ; Z2 S, w! s+ J+ G/ q* u

  4. 4 {  R" {$ E9 a7 O6 g4 p5 k% Y
  5. $str1 = strtr($str, 't', 'z'); // zesz! r# {* w" u! n  o
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1# }7 `: T1 C9 R1 ^3 @; w5 S6 D
  7. $str3 = strtr($str, 't', '');// test- A6 j8 m7 |! P. v* @
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    $ T; l( B6 w& v. i" y$ i
  9. 3 d( ^+ X3 n5 ?+ j+ u8 H) b
  10. ) s6 E1 T) U7 ?
  11. $str5 = strtr($str, array("t" => '')); // es
    # F8 g# L/ Q' O# |/ h4 f& H- S
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

$ T4 s* S% p; R7 J3 W# r9 e
  有两种传递参数的格式,一种是数组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

8 l$ L3 E: u% r, ?  Y' g
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    2 @# _5 g& s$ @9 C: b1 ~
  2. 1 |& U( i- p9 {: f6 i
  3. $str = "test";# G7 q8 b. x$ w! K' u3 a$ L- F6 o
  4. & O' o! V' V& m( i* f0 A1 n0 C; G
  5. $str1 = str_replace('t', '', $str);// es
    ; c# j# ?. w" O) p0 x4 M
  6. $str2 = str_replace('es', 't', $str);// ttt
      ^& \! g' f2 S- s
  7. - e$ r. V+ J4 \0 R* U9 U$ b* X1 b( D
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb. e+ O/ y# C/ w( d  U8 R
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae. e' L2 Y  W4 Z/ n) a
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
    # T2 I" x6 j) j* w7 S# m
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee3 M$ y, g, e3 x6 J
  12. + h+ h: p5 Z+ T2 i! I/ }9 q' b3 U
  13. $arr = array(
    4 e3 c, X; Z8 Q" r& B7 z" y, x
  14.      'a' => 'testa',3 S$ ]$ U" k) q# p% Q, B$ Z
  15.      'b' => 'testb',' m" J5 G" l2 E0 u
  16.      'c' => array(0 [- L7 w2 `5 c* K+ O7 ~3 o
  17.          'ca' => 'tes1',) S' T2 ~# e( C1 `( t9 \9 M& Z
  18.          'cb' => 'tes2',
    , \6 Y- N; T- Y/ J. B" ]
  19.      ),
    + k/ f& R- v% b' L) B
  20. );
    . d- U" z3 {+ q7 y. m6 T( e& X

  21. . D" @& B' k6 G7 _
  22. $arr1 = str_replace('es', 't', $arr);
    , `* b' @4 W; W$ w" f% R
  23. /**9 p, Y' k+ @& g/ A* ]2 X8 S
  24. $arr1 = array(7 [. A5 x6 [) Q2 l) W; d! l
  25.      'a' => 'ttta',9 m+ p. `9 h0 d+ ?2 O& p
  26.      'b' => 'tttb',3 R2 a) D% Z% l( \8 z
  27.      'c' => array(/ @1 W! U6 {; ~# w% g8 x/ M
  28.          'ca' => 'tes1',: ]4 o: }5 ^5 L( t, F+ l, \$ H
  29.          'cb' => 'tes2',, Y6 s1 z# y: x; P+ _7 A
  30.      ),! {$ {3 i% x, n4 F0 I, F
  31. );
    6 H; f8 j5 x6 \5 v0 \9 M
  32.   *
    4 A6 K7 [- }; Z" l9 I6 p  d. z
  33.   *7 u( m  J$ Q( b% x8 n
  34.   */
复制代码
7 X9 O, b& C& G  I$ J; J
1 M9 i( P4 Z8 F: t3 p
% S$ l* y  X; i( W- }( P  ^
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。

+ m' t3 P2 x& W- B
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php; q( Q. E2 ~' q: f! j
  2. ( c! u2 a' ]; i. D
  3. $str = "test";
    * ~4 v( D) c. l8 U/ y, E1 G
  4. # t; ^! L9 Z, ]
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    9 V: d5 Z) g- W0 n7 d3 D! f

  6. # Z( {8 e( z2 H+ G% r
  7. $arr = array(6 i, e2 w% h5 O" o2 f$ {
  8.      'a' => 'what',* _5 h- U0 {3 v8 w: ]
  9.      'b' => 'are',% @; r/ u: q( O. Y3 K+ ~
  10.      'c' => array(8 V% {& I6 r1 A- o/ u3 Z5 k5 V4 D
  11.          'ca' => '11',4 ~* }$ ^! o. x5 z: }
  12.          'cb' => '22',
    & n& \6 S. E; M0 p) j+ L
  13.      ),) v# s1 l/ ]3 S! F8 B6 M# \* A
  14. );! p4 f/ J: z; T; p4 j6 }: n9 b

  15. $ c1 I# ~+ {3 }4 Z6 i  q
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);/ L8 C! v" i7 h; R
  17. /**/ M& i! F) ~4 @, z5 A+ K3 g3 O
  18. $arr1 = array(7 [. ]) G9 Y& Y$ y: F9 ~
  19.      'a' => 'okhat',
    3 h  g$ [0 X/ w$ H( i
  20.      'b' => 'okre',
    - }6 ^0 v/ z& V' Q. D( }0 `
  21.      'c' => 'okarry'
    ( Z6 H3 `1 Q4 v. M) a- O: T$ k4 T
  22. );
    " B) S$ S5 b: }  c
  23.   */: T* f  H! X: `5 j; r- I
复制代码

4 `4 k* G* L# \+ y( ]3 @
数组替换的时候,也是处理一维数组的字符串值。。

- ^3 k" |8 u! I% `; F
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
    ' {; {( O% g0 [. |6 i. u/ W& _+ h1 ~
  2. - r4 c" H0 _% R( g1 P. k  ?5 Z
  3. $arr = array(
    & f6 z: n1 k/ x1 S6 w$ X
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头4 h# X4 P7 B* H: j2 t9 F) T9 x
  5.     'b' => 'XXX13188887777XXX',
      V! h. `4 [8 X0 Y& M& L" a8 [- N
  6.     'c' => 'XXXX918811113333XXXXX',
    $ p1 g  N: Y/ r* z/ }- q* P
  7.     'd' => 'XXXX188111133331XXXXX',
    8 x) S, S+ y# t! ?5 J, i0 D& T
  8. );
    , U# o: h% ]* D& w/ W5 a9 {# Z
  9.   [& p, z  P0 J" k
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    / E+ E3 A; n+ k6 `3 d+ I

  11. 0 S( ~# Y8 x2 ?  u- S
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
    % W: X1 A* U" D/ I
  13.   Z$ ~: k+ y+ d. C1 U' E# \
  14. /**
    3 W# q9 m# J4 [$ q( E
  15. Array
    5 @2 D( C& A7 V, {) Y: m+ o0 t
  16. (0 ~4 ~; d- d+ z8 V" [
  17. [a] => XXX25012349999XXX
    8 r7 }# \% h9 ?2 f  J; U+ I5 `) h
  18. [b] => XXX mobile:13188887777 XXX
    ; e; F0 H0 R: @) }
  19. [c] => XXXX918811113333XXXXX8 r  Z+ j0 L. D& z1 t& v9 x
  20. [d] => XXXX188111133331XXXXX
    ) b. K6 Q2 J( j: n; J8 F
  21. )
    - j0 `; W2 u$ a+ Y$ f
  22. **/
复制代码

/ c& z1 [. _- ?+ G; j& g/ A! S
. V+ q# p9 l0 u( R) ?  D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-9 22:18 , Processed in 0.181806 second(s), 21 queries .

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