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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
: R- s& z& N) W' w
strtr()的用法:
  1. <?php
    $ |! e2 ^' C! P: B

  2. & E7 m# |+ p" x
  3. $str = "test";
    & ~+ D$ K" n; Z" k1 {3 C- j2 P0 k) Z

  4. / f' b& D! T4 S7 b
  5. $str1 = strtr($str, 't', 'z'); // zesz
    " @/ p4 R, C" ]8 m) S
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    ( x, V$ J: }. I+ s+ w* V' f
  7. $str3 = strtr($str, 't', '');// test
    , L! I; l4 ]7 M: c% m: v
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    - n8 H# s% A! H) V# t) A2 I0 X" p
  9. # t" a- ?; V" I5 ?" M! Z9 r3 ^
  10. 0 x$ y* ~' C' h# g- n1 ~
  11. $str5 = strtr($str, array("t" => '')); // es
    ' ^' d( W5 d# m7 r# I2 k
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

# }3 i2 ^) g3 v1 j
  有两种传递参数的格式,一种是数组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 l6 A9 `! P& }+ E4 [
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
      Y+ h1 a0 e: l

  2. - c6 h' K/ Q( R/ z, p
  3. $str = "test";; p0 J' |& J- x% G) `+ B! B
  4. 6 M+ Q" r  ?5 e$ z
  5. $str1 = str_replace('t', '', $str);// es8 \" y% w; e" g) o
  6. $str2 = str_replace('es', 't', $str);// ttt: t" R" x" R( T- ?
  7. ! f$ n2 [6 u2 l" o4 m
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb1 [, u  c' z2 z1 F; y. B
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    9 R$ L/ u7 R$ s% q6 Q" n
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
    % X) u: i" x$ Z+ @' r$ E
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    & g3 Y( U: }! T# A, d2 k7 G
  12. # T& G6 j* C1 ^6 q. O' c6 w
  13. $arr = array(! z! H4 a& d3 D9 _) K
  14.      'a' => 'testa',4 e% s# w( d' e% E3 @* H7 y8 {' \
  15.      'b' => 'testb'," H* n$ q" r! i2 ^5 ?
  16.      'c' => array(
    ( d" g4 Z* j, R% W% K1 b# O; m, H
  17.          'ca' => 'tes1',
    ; b3 J% V  J- k9 Z* E' ~6 l
  18.          'cb' => 'tes2',
    6 p/ l3 y0 P; k7 n. j7 k6 c
  19.      ),. K$ e6 E. K+ h  l3 o( b- F% j
  20. );
    1 }0 W9 ?/ _3 J! x8 I5 a* I

  21. 0 T: d( Q- b* ~- N6 j
  22. $arr1 = str_replace('es', 't', $arr);) H' O5 Q3 [% o" ~; i' ^, o% i2 }; ?
  23. /**
    : ?5 e3 C* h8 u* t
  24. $arr1 = array(
    7 E$ C* d& q) l8 c- \
  25.      'a' => 'ttta',) v2 A$ F* q9 ~! |, L& Z2 Q& N
  26.      'b' => 'tttb',* H- n' I2 u/ n1 |9 N
  27.      'c' => array(
    5 g/ o) X+ @; h7 [, I0 t3 y
  28.          'ca' => 'tes1',1 }. \% U6 T* M1 z. D# V. L
  29.          'cb' => 'tes2',9 j& |+ L$ s6 g, \0 y/ _2 }
  30.      ),
      h) X/ b, o/ _
  31. );- m3 u$ g6 S/ k9 q; k) C2 ?
  32.   *3 p" E  o8 @/ n5 x6 s
  33.   *
    ! O% g4 o2 Z% @
  34.   */
复制代码

- x  U0 h/ A+ u# `, j/ Y4 g% h6 ]% i7 h& H% y& z. Z( k7 [) q

1 z: {/ \  M  z
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。

$ v4 x2 G- r. K
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    0 D; Q' {; _, u' c) U
  2. , H( F1 ?" ?6 L: D/ Q
  3. $str = "test";# }1 u  w( v1 w4 Q- S$ W6 {  {8 t9 j

  4.   X( S4 x' J7 L" T
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt6 h( u& k& x0 l3 l* h. ~0 A7 n5 s, s# g
  6. . O" q$ }. m: g, g" q" s
  7. $arr = array(
    ; U8 E. F; d' D, s
  8.      'a' => 'what',
    & X: d+ H! d$ M4 {5 B
  9.      'b' => 'are',
    ! p. Q- k% }4 ^6 E* G
  10.      'c' => array(
    + V: P2 k/ z' E/ B4 H. _: e* m
  11.          'ca' => '11',
    8 @$ U( _: ^' `6 U4 W. W/ Z; B9 x$ d
  12.          'cb' => '22',
    7 r6 e' ?/ B/ ]% K( U
  13.      ),
    + S8 g) x: L1 p: p
  14. );# b6 x. H3 G# F2 n5 y, N" V  l7 q+ o

  15. 0 ]: e- _0 ?, m0 t
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);
    / i. L7 X  o$ @, ]/ @" u- b
  17. /**
    ' b! ~4 }. k3 \7 J9 r1 u9 ^: z
  18. $arr1 = array(- F/ o2 N. Y( S) h* c" j. i
  19.      'a' => 'okhat',
    5 d* B( B9 f4 H& Q
  20.      'b' => 'okre',
    1 A/ p. K5 T' D2 r1 x
  21.      'c' => 'okarry'5 ^% d8 [5 R/ N4 x# ?! V& M* a7 V
  22. );5 \. N0 x6 \# }
  23.   */, s. a- W: p& Q2 r
复制代码
% v% m6 T. H, i1 Q+ H
数组替换的时候,也是处理一维数组的字符串值。。

+ N8 k5 u+ w5 m* H
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php3 c: E( I! P/ e7 Y

  2. $ G) ?3 T3 g& c- M& J- o- x1 g2 y
  3. $arr = array(1 s! ]; O) R8 L
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    5 ^* j. n; W/ `1 q6 A" i
  5.     'b' => 'XXX13188887777XXX',3 T3 Z( p7 h2 G% F
  6.     'c' => 'XXXX918811113333XXXXX',4 ^; w) i; `) f" ]! t
  7.     'd' => 'XXXX188111133331XXXXX',+ v3 l( |) i9 ^( U8 U6 @+ h$ a. u
  8. );7 O" D7 g8 p9 v4 Y
  9. # ]8 ^( Z0 n( w9 w" _  M* V) d. p$ @
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    7 t5 R3 l* ?2 R4 Y# I/ K( M
  11. 2 a/ N; o, c* |
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
    , L& M2 y' b+ _: J0 C
  13. ; p' B- r: ~5 j" q6 J" ]
  14. /**
    ! D6 g& I" ^! d! \" [' K6 n" l
  15. Array: q! O4 w0 R) ^
  16. (
    . A5 h4 @" u: y) n4 B
  17. [a] => XXX25012349999XXX5 G8 K6 q/ X9 O9 r/ j$ C; r
  18. [b] => XXX mobile:13188887777 XXX+ N* L% `: {4 L* E# e* l
  19. [c] => XXXX918811113333XXXXX5 C4 f4 l. A$ k( ?8 {! C% i# \; g0 F
  20. [d] => XXXX188111133331XXXXX% N* y7 c! \4 ~: z- l, N2 U
  21. ). m- {% F- O& g
  22. **/
复制代码
  D/ r9 P8 ?5 r% N( b- c# p

- ~3 w  _  k4 b- R7 R- h' |8 _1 N6 h
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 17:20 , Processed in 0.076255 second(s), 19 queries .

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