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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

/ F+ m, }2 v( G7 F# H/ n# ~; M1 e
strtr()的用法:
  1. <?php
    2 Y* b* w" G* U9 f
  2. / k3 q8 N' A$ |( w
  3. $str = "test";% m9 c6 w* A0 ]
  4. ) s# K; @- }9 d3 P( m- X
  5. $str1 = strtr($str, 't', 'z'); // zesz
    * [2 g5 t1 m1 ^$ W
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1' h' \; |! z* Q
  7. $str3 = strtr($str, 't', '');// test, _, o; z$ n) P8 K
  8. $str4 = strtr($str, 'ts', '12');// 1e21  K9 x# b/ y0 x8 q0 J! W
  9. 6 n- L! e  ]* w0 G8 d. l; E/ f

  10. 2 q1 m; j; @4 w% ]
  11. $str5 = strtr($str, array("t" => '')); // es9 d0 x7 q  G/ c8 ?" s
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

8 G6 y) d) D& ^" N
  有两种传递参数的格式,一种是数组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

: k3 a( E6 y+ u5 ^7 M8 l) N$ c% g8 c
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    1 d# ]0 L; _' k5 V2 [

  2. # T; r9 g) @2 p% h, o
  3. $str = "test";
    , @" m4 v$ f! k+ ?

  4. - @' U8 U. w( p2 [! d7 G
  5. $str1 = str_replace('t', '', $str);// es
    ; G5 @7 S: H/ {# N+ L: @9 v
  6. $str2 = str_replace('es', 't', $str);// ttt
    6 z  c& p3 y, ~8 W2 \: P. }

  7. & H7 \: ^9 d# F+ P/ ^
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    % X! V" G* x7 o1 H, L
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    # r* E1 |. y: Z7 |4 k, |+ X
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
    , p/ k5 R/ Y/ z- R+ K" E- E5 L# W
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    * k  B0 F2 L2 V% Q- q

  12. 9 g( A) {- ?7 o: W5 T
  13. $arr = array(3 l: i* h5 ^. J1 {, D7 ^) q- Z) b" c4 V
  14.      'a' => 'testa',
    0 M& j9 E: d6 e
  15.      'b' => 'testb',! q9 I9 d# }' R- f& v6 E7 R
  16.      'c' => array($ E# U/ C( Z5 d
  17.          'ca' => 'tes1',/ {( l7 @6 k% t
  18.          'cb' => 'tes2',2 G7 g" N; s0 }1 t9 o/ ]
  19.      ),$ `3 i7 A, v: {& x1 K+ J5 [
  20. );
    # E" v# ^8 P% L$ k/ h
  21. 5 {* V8 G. ^- ~- W
  22. $arr1 = str_replace('es', 't', $arr);' v  V: H, z4 `$ Y$ [
  23. /**# X8 d# J" t4 X+ G" o9 |5 Z  X! A
  24. $arr1 = array(
    - J. Y9 j  O( `$ z) x" A+ K
  25.      'a' => 'ttta',; d7 k6 i( f; j0 w- C1 E" B+ V7 N
  26.      'b' => 'tttb',
    : f1 Z2 {* C4 M6 z6 F
  27.      'c' => array(
    8 U, J  ~2 D- X6 v2 G! L. W
  28.          'ca' => 'tes1',3 T2 z0 G$ c8 n- T# m% m3 I
  29.          'cb' => 'tes2',+ C& R, p2 X7 f* L
  30.      ),  f  d5 |1 C8 ^; D/ |
  31. );
    " s/ d4 Y" o' n  K7 a" K$ \0 |0 A* p
  32.   *" ^% E8 x- E- K+ L5 n2 {! Y+ {& f8 c
  33.   *2 `& N& e" m! k) h; g: V
  34.   */
复制代码

9 _/ V* C! N6 m% Z2 z
/ A4 X% j9 u) [  R' |1 f
/ O% q% @, }" h! p6 S4 M0 z" g
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
) a( g9 j* O2 P* ^$ u
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
      B1 g" t& _- v) x/ d* b% k1 s
  2. 8 d, o$ E( c, ^. Y2 X2 K. `+ C, F; j; f
  3. $str = "test";* J4 S* D3 z6 h
  4. 2 G2 q# j$ u" `8 R5 [9 \1 q2 E
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    # y. B  |9 E- B8 Z9 t# d
  6. ( ?4 p/ \) v6 B. U4 k9 y
  7. $arr = array(! `/ l1 c6 |$ H( p5 R( W
  8.      'a' => 'what',
    ! B  @( R  p6 F
  9.      'b' => 'are',
    # V' `* k# n8 c$ P
  10.      'c' => array(% J/ _2 N0 _5 z
  11.          'ca' => '11',3 o. T3 A, I2 ^: J# u
  12.          'cb' => '22',
    * K+ z3 ]* D7 }- `2 L  k
  13.      ),
    ( U/ |9 C/ V0 d+ d& ^, b  x2 V% r
  14. );
    7 j. c0 F! q" b8 W. E% p3 G
  15. 5 k" j" Z' O* I$ U- Z$ G- @
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);
    1 u% f, o; V& q  t( e
  17. /*** k! P- I2 W4 k; ~9 j9 F; a, ], L
  18. $arr1 = array(' x, J2 a- Z; s6 i8 R5 w1 {, D
  19.      'a' => 'okhat',' ?7 t3 v0 a% H3 I0 P% r- ^
  20.      'b' => 'okre',# x6 @, S; E9 V+ X6 h
  21.      'c' => 'okarry'+ T$ |2 c  F6 f  l2 ]/ S
  22. );9 x6 C9 h8 a7 }5 M8 ^/ ~
  23.   */
    3 R  C9 ~- }- D, [- T
复制代码

" x' ~* R. x5 D+ P
数组替换的时候,也是处理一维数组的字符串值。。

# G  g: o# A9 ]% C6 z
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
    7 ?% X8 }6 U4 ~* y( u& R
  2. " e- ]& b4 h$ O4 p+ |1 @
  3. $arr = array(5 A- Q" @( ~. s
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    4 T1 V; \, w7 H* G- v
  5.     'b' => 'XXX13188887777XXX',
    : K" `" V1 M# u
  6.     'c' => 'XXXX918811113333XXXXX',/ |* d. |5 M) I
  7.     'd' => 'XXXX188111133331XXXXX',
      B$ n8 c1 ~/ X
  8. );# r1 T; L' T+ ^* A) y1 a5 w
  9. ' N* r6 ?3 O" k
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3# G; B1 T3 y) ~, u- v- Z/ `
  11. $ q4 W! T2 ~8 a. y6 d& Y
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
    7 C1 u: e4 z8 B/ Y& j
  13. & b% ~: Z3 }8 X% y9 }( Y
  14. /**
    0 \' ?7 y7 m! i8 l) f
  15. Array
    $ [6 E! K% }8 K* y  a6 z
  16. (
    7 W+ s3 v) P1 a/ r: x/ `
  17. [a] => XXX25012349999XXX
    - `% v1 o" W  r
  18. [b] => XXX mobile:13188887777 XXX
    : K" I% y1 X$ X7 J. Q8 r
  19. [c] => XXXX918811113333XXXXX7 Q$ h+ d) q, u9 N1 y- F( z! y
  20. [d] => XXXX188111133331XXXXX
    ' o- \# G6 [, Y& f* a  f
  21. )
    " N5 k* N) H/ w$ |
  22. **/
复制代码
/ |6 ?6 R( v6 M' R3 H5 j* Y

4 S) }& t' e1 a- ~' A' G& c3 w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-5-2 14:49 , Processed in 0.075735 second(s), 19 queries .

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