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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

3 \  b2 N* _( Z( N* ^9 w
strtr()的用法:
  1. <?php+ N' F/ b; y3 ^/ r- |

  2. 5 e7 b* ]7 p$ h
  3. $str = "test";
    " V0 N. k) g. Q. i+ r1 Y) j: ?0 ~

  4. 3 ~* B0 x: _# j6 u# k
  5. $str1 = strtr($str, 't', 'z'); // zesz
    " ]2 N& ^2 y# p" \
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    & ^9 r1 \6 G6 C. ]0 {
  7. $str3 = strtr($str, 't', '');// test# l  W. E, {* a! g7 Y5 U% \
  8. $str4 = strtr($str, 'ts', '12');// 1e21. Q  w6 V  L4 J8 @$ g5 L

  9. , @; m& z% C2 r4 K, p. v; u" z
  10. " p+ V* K" X* g, S
  11. $str5 = strtr($str, array("t" => '')); // es7 b, F3 M# G( U! U* x% k
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
- r& @" v, f+ a' b
  有两种传递参数的格式,一种是数组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
3 i: u# L1 g# j8 h( ]) B
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    2 t2 `6 P7 A# @
  2. 9 O& s) `& j$ T4 \1 A+ `* L
  3. $str = "test";# v$ i& {, k0 s! s5 k/ d# p

  4. # A: L3 E. ^/ w1 q4 Z2 o1 e6 z: W
  5. $str1 = str_replace('t', '', $str);// es
    ' t1 h: c  j* S  a8 l* I$ u
  6. $str2 = str_replace('es', 't', $str);// ttt
    ! [( [- w/ N( g) I7 t8 {$ O; {
  7. ! e$ M9 g$ x4 d8 v& T5 V
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb" P, c1 U1 }- Q  `" S/ _
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae9 ^" l. B; M$ g9 T7 d" ~1 `
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa+ j8 I( [1 f2 O( F2 x$ K
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    ' S7 W3 k4 V# X2 L
  12. ' L/ f! g/ }; g% @/ Z* t# R% g2 r$ _
  13. $arr = array(
    , U" H9 @* J1 \+ ^
  14.      'a' => 'testa',
    $ H: a3 x% k% q( E) K
  15.      'b' => 'testb',' L9 R# i& X& [3 {4 b: V
  16.      'c' => array(& m- M& @4 F# J5 h/ \
  17.          'ca' => 'tes1',9 ~/ `7 D1 |1 O  Z  w
  18.          'cb' => 'tes2',( [3 V" |( N' a
  19.      ),$ h! h) \; o2 c
  20. );
    9 Z: G3 @/ t% f: T; N" @
  21. 3 p- H  c6 D" A) y3 w- \1 p& }
  22. $arr1 = str_replace('es', 't', $arr);
    $ l2 u( }1 G2 I" A1 o' ]
  23. /**
    ; q/ {! T  h* q0 I# I2 V
  24. $arr1 = array(% j( }! t: O1 [
  25.      'a' => 'ttta',% t6 X7 B$ l) [* i5 w
  26.      'b' => 'tttb',' Y* M% P( @8 _( E, L7 l! ^
  27.      'c' => array(2 r. g8 I4 i6 d0 p" c; I! d" s
  28.          'ca' => 'tes1',7 W# i! a5 B5 h# ?
  29.          'cb' => 'tes2',0 I" j* L- n* O' a
  30.      ),
    ' K9 y- ]$ W; v$ k) N( h
  31. );
    1 q6 P% u* R3 q; B
  32.   *: u8 g) W5 m9 t
  33.   *  M) W2 \' q! l
  34.   */
复制代码

; e9 F7 o  v' R! R3 o
- S0 a, l5 d( s; Q0 l7 E6 d2 L, u: a# F" G* E" S% g+ R! h# c0 ?
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
0 s( g, S8 E4 P9 w' L+ q
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    / w& w! o9 j+ ^' W7 H* R+ w1 S3 K

  2. " |& T6 X; V9 X2 s& z
  3. $str = "test";; O9 ^) n" u& F3 g8 Q: r
  4. % a# e. {( `2 X
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt) ^: K  H0 E4 s9 q

  6. ) j4 k1 Q* T4 O' S; n+ R3 m$ W, ^
  7. $arr = array(% ?2 {6 ~+ m& t( p4 w+ x
  8.      'a' => 'what',
    ! H; {* w0 b3 }/ c3 [9 I# D
  9.      'b' => 'are',
    6 K2 ]. ?  d- V) K
  10.      'c' => array(
    + {$ `0 d; M! S" c6 p
  11.          'ca' => '11',0 o. S& Q% u( m0 Z/ Q% u7 ]( x* e
  12.          'cb' => '22',* u* O. W0 A0 U5 u
  13.      ),9 F+ S+ a9 \7 C
  14. );
      O* P2 n3 c1 @4 e( ?/ [4 ]

  15. ) G4 g+ J& ?9 ?" Z6 n
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);
    * \* h" R! m" l1 g
  17. /**
    0 B- D! l, h* J; m3 Y  B
  18. $arr1 = array(- G' V, a5 h+ ]. O  r% C2 A4 x7 p
  19.      'a' => 'okhat',
      }' w/ q' z( t! T, x: F
  20.      'b' => 'okre',
    5 F5 {2 y1 |1 d4 E" f+ c
  21.      'c' => 'okarry'
    3 ]6 s# g  d. ^" g* {" M
  22. );8 ^1 {- Z/ C% [# T+ m+ H
  23.   */
    7 g; K+ E+ L0 m6 }# C% c! D
复制代码
2 w! s! m2 e  j5 C. r; }& w/ [
数组替换的时候,也是处理一维数组的字符串值。。

+ M5 S/ c! u1 L- V8 L) O- d7 x: {
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
    4 X) I1 R& l4 r  b' R& {

  2. 4 S" w6 C/ R# O  R/ }
  3. $arr = array(1 X( l$ E3 ?8 r7 h) I# Z
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头. i0 Y3 r# ~% Y6 D
  5.     'b' => 'XXX13188887777XXX',
    7 S6 \( t, h, w6 P' ~
  6.     'c' => 'XXXX918811113333XXXXX',
    1 @+ l  D$ k; b3 A% @
  7.     'd' => 'XXXX188111133331XXXXX',0 T9 D2 X+ z4 F0 H
  8. );' |2 e# W7 U+ E, Y3 \- g* [
  9. * x8 g; ~8 j/ w  b, l. W
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3; f2 M- B9 F$ S

  11. 1 u8 x5 g, [. G# u) D, P( u
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
    - \4 p/ t* N, @  ]3 S4 L- k

  13. 8 W& A. s+ x& ~! q
  14. /**+ K6 ^/ g; {. D$ \( `  ^
  15. Array6 p1 }  m8 |$ ?! l6 l* K1 f$ z0 ~
  16. (
    , x4 B3 u  H$ C/ t/ t7 F& {
  17. [a] => XXX25012349999XXX
    ) T8 J, j% f0 a/ E
  18. [b] => XXX mobile:13188887777 XXX+ s2 m" O: X$ q; Y: o) P
  19. [c] => XXXX918811113333XXXXX* W) G- _0 n) m8 N& [9 A1 ~
  20. [d] => XXXX188111133331XXXXX) i7 J' R5 _4 M1 Y; s, e
  21. )
    # y) u  J( n, x$ }
  22. **/
复制代码
2 b! C4 ], Q2 u- T6 D3 H: Y

$ v) l) {4 v+ Q* ~+ I2 K' t3 a
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 20:49 , Processed in 0.075247 second(s), 19 queries .

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