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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
$ X9 t5 n" K, @0 ]' I% C+ P
strtr()的用法:
  1. <?php
    $ Y" R( C8 x5 P8 i3 M
  2. - D, {' m, L% Z" V
  3. $str = "test";& z" d+ l' i+ v6 s9 h
  4. : S  N" R5 k3 z  \6 t+ n
  5. $str1 = strtr($str, 't', 'z'); // zesz
    7 ]0 {' t# A/ T, `( q- O
  6. $str2 = strtr($str, 'tt', 'z1');// 1es14 e+ A7 y( Z/ E1 }( s: o+ u
  7. $str3 = strtr($str, 't', '');// test
    9 L- G% ]  j) a8 W+ J: f
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    , w' ?5 [1 H5 W, r7 x

  9. + ~1 B0 n$ Y, G! ~' h; j( w

  10. 8 M3 C, n3 o+ t1 W! A; h6 H  n
  11. $str5 = strtr($str, array("t" => '')); // es% C# s1 q6 D. f+ a4 j2 H6 b) I  r
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

  a( G# p8 t+ F3 P" P  `' 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
/ T' K) s. W0 F7 U6 P8 y; ~
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
      X( C+ c6 O% P% l) a! H
  2. 1 ?: ?+ H, o  {: U$ ^) ]0 @
  3. $str = "test";
    1 q. ]! ]& k4 K! y" `2 c$ m1 w$ H
  4. 6 A/ v. u% `/ F# a
  5. $str1 = str_replace('t', '', $str);// es
    3 F; y6 n- ]- k: A, W7 y4 t
  6. $str2 = str_replace('es', 't', $str);// ttt+ C; i8 [: c' c* o

  7. + d& N; i1 d6 I: F- g; e0 I
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    + l) y# l8 D+ u  C8 L( c9 I
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae( n, ?6 l+ Q% ]) f; G8 Q/ n% \
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa) W% \) H. a) w
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    - ]9 `3 c+ t- u+ v( a

  12. " l2 z3 i. p, n  n9 i
  13. $arr = array(6 \( M( j& R! [" s) u3 Q) k( p
  14.      'a' => 'testa',
    9 J) S" D/ e* o) Q, D" q/ N
  15.      'b' => 'testb',. G1 t9 ^& M% M* T
  16.      'c' => array(  q+ f% ]- t0 ?8 K2 `! c& Q( b
  17.          'ca' => 'tes1',
    1 o0 T4 Q0 w6 ?! y! p  N2 L$ r
  18.          'cb' => 'tes2',$ q9 a* A2 l4 ~, \/ ]
  19.      ),
    9 w* _: O% e; ]4 x5 d1 O6 E
  20. );' V+ s& ?, Z; f$ \; N

  21. 1 K: {3 |3 E  |% N
  22. $arr1 = str_replace('es', 't', $arr);
    # C% m% H$ u' P. F) {' a) d
  23. /**
    1 i3 }! S0 F# }, M3 M2 s7 p2 l
  24. $arr1 = array(
    5 X- x. m2 W2 P* R, U
  25.      'a' => 'ttta',' }' s- z1 v8 L1 M& T
  26.      'b' => 'tttb',
    * F  p; L9 @* E$ Z# c: C
  27.      'c' => array(
    ( V. j- u+ Y, ~. ?6 U8 K
  28.          'ca' => 'tes1',
    2 ?! J4 L. Z) |4 _* J3 X2 `
  29.          'cb' => 'tes2',# K4 Z; V/ V3 F; x9 E0 g$ G
  30.      )," v% K2 Q% g- A* X: D& c
  31. );8 I+ T! f9 ?* f+ v9 l
  32.   *
    ' a8 B% u* b* Y* @& P
  33.   *; o0 R+ ~2 B2 d% J$ |! q* {
  34.   */
复制代码

) C  R5 O. u* W* t/ i/ d- Q% ]! ?8 Z: f$ z/ r3 m/ L

0 V7 t9 I+ m0 b, w. ^% u: X7 Y  N7 z
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
8 x5 z8 }/ K) T1 S% |8 }
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
      M# d+ X+ V" t: t5 b4 h6 }, p
  2. 6 p& ~+ K2 A* Q! k1 z& o7 S& U
  3. $str = "test";. v. j* u0 S1 x8 }* S. J

  4. 0 |) n) J) }& @0 L. P5 s
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    3 A" r; Q$ Q: A, K

  6. 3 H6 E' X6 E1 a
  7. $arr = array(
      ^$ W, l, r" F
  8.      'a' => 'what',
    4 [( f; k0 X9 D' p( p9 g* Z
  9.      'b' => 'are',
    . U. T$ g/ |0 c& {! P1 z% t
  10.      'c' => array(
    3 Z; u8 J6 j$ c) u$ d
  11.          'ca' => '11',
    1 v- L6 Y+ j: p9 l+ k# A: A3 F
  12.          'cb' => '22',
    / f  p& J" C- i( o* Z/ n
  13.      ),. [6 L$ `9 r% l: d# }' R! [# W! R) y
  14. );
    # O  J& j0 i% U- s' C6 R2 ]
  15. 3 W  n# E1 P2 q3 J' O
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);
      I' }  Q  ?5 N. f
  17. /**
    * S7 {* \2 W* k" C' U3 z8 P
  18. $arr1 = array(5 f2 d! M' ^" ?( k  V# S0 u/ b
  19.      'a' => 'okhat',) f8 p9 k7 ?) D! @
  20.      'b' => 'okre',. c& n2 F9 Y9 G  e+ B
  21.      'c' => 'okarry'
    & H' p  ?# }( g5 o9 z& w  y
  22. );; e& e: ~( A: m  e* p, i/ X
  23.   *// g9 q7 h, e! |1 e! i7 R6 s
复制代码

# H: E$ U0 Q5 G. m  f& ^. ?8 ^
数组替换的时候,也是处理一维数组的字符串值。。
3 B7 z! y6 I/ r" C
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
    ' g4 j7 O* T. C9 q/ q, C3 {+ l9 n( y# g

  2. , u% l6 a/ v# ?' S9 |/ H
  3. $arr = array(
    ' M. V8 E1 B7 x1 t8 }9 B6 ?
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头* v- H" P# m) Z1 C; Y
  5.     'b' => 'XXX13188887777XXX',
    - m7 V+ C' M, i4 R
  6.     'c' => 'XXXX918811113333XXXXX',
    & V# d' |% a  ~) K1 R
  7.     'd' => 'XXXX188111133331XXXXX',
    + q3 M  E" G/ C3 F; e4 T
  8. );
    # e; C: O: `. m# |* I7 l5 N$ w& m
  9. % e$ e. p6 z. ]) E
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3  }9 v2 X4 Q& I) h8 e. l0 r
  11. ) u2 N) h- ~/ O/ @4 C! v2 o9 i
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号* l* m9 \: a# J& C% ~

  13. * F/ y$ X3 W/ D7 W; t' K% z# W
  14. /**! o7 `5 J! I' Y  s
  15. Array2 n  T4 h" Y- ^* _! E
  16. (
    9 f) k, p$ F. @; h' n
  17. [a] => XXX25012349999XXX
    ' d7 C. ]6 p- H( M
  18. [b] => XXX mobile:13188887777 XXX/ }! w/ a, |% V/ v& s0 [
  19. [c] => XXXX918811113333XXXXX
    . W1 X, V5 h% D" T# D5 ?+ f/ U
  20. [d] => XXXX188111133331XXXXX; e; ?8 t0 R6 t8 s  \* J  u
  21. )
    " ~: Z* E# o7 G- U3 X
  22. **/
复制代码
- G/ P+ n. e1 K. E" k! u

) o' R( f: I0 w, D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-3 14:06 , Processed in 0.133130 second(s), 21 queries .

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