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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

5 j/ `0 Q: }* m1 x0 m1 `' z, u7 L
strtr()的用法:
  1. <?php( }9 j; z( X' \; j. {# }& c

  2. / b1 J. @" U4 z3 w! D
  3. $str = "test";
    4 w! K: B1 q# g7 s5 a/ \( ~
  4. # t9 J4 g' m/ J! C2 s* g
  5. $str1 = strtr($str, 't', 'z'); // zesz
    / ]) }/ {9 [' J! R0 a
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1# c# ~9 s, H% I
  7. $str3 = strtr($str, 't', '');// test
    1 d0 T! F4 \, B' s/ {
  8. $str4 = strtr($str, 'ts', '12');// 1e21/ S0 |/ D, L, @

  9. , k) n, d- N! L# o+ s2 t/ q
  10. * q* _6 ~! e2 I- W0 S' ~5 e. m) ?
  11. $str5 = strtr($str, array("t" => '')); // es
    / |( J1 v5 f# y1 _# z
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

; j( Z+ S- w* i* E; E. [0 W+ L
  有两种传递参数的格式,一种是数组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

: V# O7 [# ?* j9 g$ Q
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php7 s+ V5 z" ]+ x6 P) i# u$ }) |* s
  2. 5 a- c; \8 K7 g8 D1 _9 p& f
  3. $str = "test";7 N" `) M9 a. C2 ?5 c! {! N5 p
  4. % V; Y8 h+ |3 K
  5. $str1 = str_replace('t', '', $str);// es& K3 Z/ [0 a$ B) m) L7 ]/ t
  6. $str2 = str_replace('es', 't', $str);// ttt" O1 }& i! {: c5 u: R
  7. 4 R  r6 T: p& z& T' O6 {
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb$ \# u. R) n! H$ E, T4 V5 M
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    ; u# N5 S5 D% ^* V5 J- [& q
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
    3 @1 P; a3 @$ v% a5 v" B, j
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee) K# }  h! o" p' @

  12. 0 ~$ G/ M" O+ C4 I0 ~. ~
  13. $arr = array(
    " X3 }. X8 U6 q/ f2 @; K
  14.      'a' => 'testa'," ?: j( c7 p. C! |
  15.      'b' => 'testb',( N+ |1 J5 q+ T$ b7 a
  16.      'c' => array(2 r. s7 q- M- l6 r8 W( ?
  17.          'ca' => 'tes1',
    % I( h: }3 _8 E. }0 f; A' c
  18.          'cb' => 'tes2',
    6 @0 M& _2 z4 `
  19.      ),
    ) R! A' `# n2 [5 I0 R/ f) y' e  c. Q( c* ]
  20. );% Z0 P9 Q6 p! e- w; I

  21. ; c& p# F3 I- R2 z" t0 [- A
  22. $arr1 = str_replace('es', 't', $arr);
    . C# _+ N* _0 _- T9 h4 x4 _+ t
  23. /**
    # c) z( ^& `9 V' ?$ p8 D( U
  24. $arr1 = array(5 K; \: B! h* O- `5 {+ @, A% j
  25.      'a' => 'ttta',
    / v+ U. f. j- W, d9 q
  26.      'b' => 'tttb',
    ) l+ l; ~8 j( ?3 l8 Y
  27.      'c' => array(6 D- y4 d, y6 V& V/ s6 m0 x( V
  28.          'ca' => 'tes1',
    * m- m3 i+ H, T# N$ ^* R
  29.          'cb' => 'tes2',. o2 e) A+ q7 m( s$ F+ l
  30.      )," s  ~- D" K2 n7 M5 L8 _
  31. );
    ( j9 u; T) F) e* h! J" ~
  32.   *& K$ U$ g; R4 z+ D
  33.   *
    4 F% _2 `  N) S$ o; Q+ |$ ~, R5 g, F
  34.   */
复制代码
. U  T) ?+ e( H, s
* j  i& ^0 M& w5 J' o0 S
0 ?% Y3 e+ T: O; z
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。

8 R4 b, M$ |5 ^3 t1 X5 Z
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    - ]0 w; A% j0 O6 R. }

  2. ) P8 w+ G) Z. m
  3. $str = "test";
    $ |" z1 M2 _* V; q/ x8 Q) V
  4. 5 l3 s% _4 o# M8 u
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    0 {) k2 `' ?( e/ L
  6. / \# x1 v4 u4 c1 \1 }" z/ z
  7. $arr = array(
    5 T  E2 z" u/ P. y1 j$ Y0 A
  8.      'a' => 'what',# j# U$ N. U1 V: R+ M, o: P
  9.      'b' => 'are',( W$ L4 ~( n; O, b1 h$ ~
  10.      'c' => array(# R  n1 J, s+ F
  11.          'ca' => '11',1 P. H8 H. I: S( X$ K  Y0 I# f
  12.          'cb' => '22',
    1 C9 q( p3 a/ R3 m' k
  13.      ),) b6 }. o# \! [: f% k
  14. );
    7 B0 |% `( P* e7 }* p5 G

  15. / m" x& Y" a% j) ~# H. d- M+ W
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);
    # s$ A  M2 f0 R/ a- c9 w! ]
  17. /**
    - w+ u* W1 A( L+ \
  18. $arr1 = array(
    ! L' |" ?, Z' r  D' R: ]
  19.      'a' => 'okhat',
    ! W5 \+ B7 U8 T8 e( N( U- q
  20.      'b' => 'okre',
    + |$ Z) Y6 c, f, a
  21.      'c' => 'okarry'
    7 @7 u& |. z7 v0 b8 L& P
  22. );
    1 z! l1 l0 v& F6 a8 [, ]
  23.   */3 Y$ X, ^1 E' S* D5 x
复制代码
3 G/ ?1 @/ Z8 r+ ]5 V
数组替换的时候,也是处理一维数组的字符串值。。
- e% _  Z5 k; p9 v8 Q9 ]$ {
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
      b' x8 c. s; y/ T* L0 i  z

  2. 5 o8 D2 [& D( N1 s9 r- Y$ o. ~( a
  3. $arr = array(( m; @# C: ~, [$ l* }  s
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    2 W! Y8 K- K7 d( E3 J3 x
  5.     'b' => 'XXX13188887777XXX',
    ; e8 v" V& |6 p3 C: D8 y1 g* Y
  6.     'c' => 'XXXX918811113333XXXXX',+ R4 e9 F+ D0 p5 Q3 i% E
  7.     'd' => 'XXXX188111133331XXXXX',
    " e6 Y$ C* f; n
  8. );
      H& m+ f% q; I' g4 o
  9. # Y2 a2 I. \  D/ j
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$39 g. W4 k9 W% I! t! c, {
  11. # n3 @" d  C# R1 G0 C
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号, d7 {* g1 b4 r4 A$ e8 e2 O

  13. 8 ~/ ~* ?7 }% V& u  C$ x) b
  14. /**$ [# j( ]# z! T* T9 J( r
  15. Array- j% [; l& t5 B7 M& h% e7 I
  16. (0 ^/ L5 X1 @' h( g5 P
  17. [a] => XXX25012349999XXX
    + U( p) g+ g4 d$ h# d, f/ [9 Q( p
  18. [b] => XXX mobile:13188887777 XXX
    ) Y+ |+ ~' D& V  h- T
  19. [c] => XXXX918811113333XXXXX
    ) E. b1 `' J( {! R
  20. [d] => XXXX188111133331XXXXX
    , {. S. C2 A" {! n* s
  21. )
    . a0 D7 r, ]" d+ N
  22. **/
复制代码

' ?7 J* i3 _% _" w7 h" v( W: M2 _3 y" a) z6 C# ^; U. j% @& `3 d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-19 22:44 , Processed in 0.054759 second(s), 20 queries .

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