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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

' |9 O: e0 M9 C% S4 k- z  Q
strtr()的用法:
  1. <?php
    7 a$ j% E0 y! ]0 [0 ^4 u  u* M

  2. ) Z% w. m. q2 j
  3. $str = "test";
    ! \, t; |' C8 K

  4. 6 q7 T' ?( x4 T' z5 A
  5. $str1 = strtr($str, 't', 'z'); // zesz
    # Y  O7 b: T  C2 G
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1# h3 z2 ]! g% T& Q8 a8 w% C' T/ M
  7. $str3 = strtr($str, 't', '');// test
    + N: `! s. B* X' Y) o3 Q
  8. $str4 = strtr($str, 'ts', '12');// 1e216 c0 v4 G2 B5 |9 x9 Y
  9. 4 Q. F, g2 m& o( k$ o  ?% E

  10. & X+ Q$ ?2 Q. L% E
  11. $str5 = strtr($str, array("t" => '')); // es; \1 L" h+ a/ A0 [# @9 z
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
7 y+ z/ g0 h% C( @! q0 ?0 ^
  有两种传递参数的格式,一种是数组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

9 Q. D% R5 b( M* j% G4 W' [& b
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php1 w: E/ P3 K1 v, p
  2. # [# w# o: F' u8 R3 L  @
  3. $str = "test";7 p* f9 h9 ]5 [! W1 U; i0 b
  4. 0 a' S/ q" `+ a4 B0 ~  u; v& C
  5. $str1 = str_replace('t', '', $str);// es
    4 @: D/ M% t9 @: b2 L) n0 M
  6. $str2 = str_replace('es', 't', $str);// ttt
    % e, n) a7 C3 _( o- C4 ~. r  V

  7. ) B) |4 M8 n% Z( F  c4 k) M
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    1 m, [# j( w# |: e+ a0 h3 @
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae, B- e1 B' n- |" t. S; q
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa  D  f( O  K( a( l) j
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee: Z( f- b8 E* G" t; n, ~, j4 d
  12. - j% I& l. q( T  \- ]3 h; ]
  13. $arr = array(
    7 Y/ {$ z. @' V7 f# o6 Q0 e. H% U( g
  14.      'a' => 'testa',
    / X2 b$ U2 ~4 B# _- N1 B: y3 E
  15.      'b' => 'testb',
    , A+ ^- U. f- n7 v/ m- q
  16.      'c' => array(: J2 q0 V7 Y  Z
  17.          'ca' => 'tes1',+ _+ m* F# j) n- G) R4 F
  18.          'cb' => 'tes2',: k* W  F  K) v% R
  19.      ),
    3 a# v0 I! {8 E: O4 i3 y6 U4 ^
  20. );& Y0 A7 ?- K# c% M, ?) n+ [. f
  21. 1 S$ O% s* \: Y
  22. $arr1 = str_replace('es', 't', $arr);
    0 [+ ~: \0 k* I  Q
  23. /*** K! s. Z' f" e& Z- P9 w, n
  24. $arr1 = array(7 ?2 H: J9 i6 q6 d/ q
  25.      'a' => 'ttta',# T; M! `& f; V  b5 {) K) @9 n
  26.      'b' => 'tttb',
    / ?. _; u1 {2 V. f
  27.      'c' => array(/ }. D; @. }5 N7 y, l( Y3 w
  28.          'ca' => 'tes1',$ @' d6 W1 |/ J6 J7 r
  29.          'cb' => 'tes2',$ Y0 n4 U% ]% c* Q& c% Z* B
  30.      ),
    9 F3 F. x. F" D) c! h
  31. );
    0 ~! z( ]! s# O, V
  32.   *
    / k$ U# v. R1 _0 S  r
  33.   *
    $ S. `3 ^  p; s9 q
  34.   */
复制代码
! y' D% `0 v. N; W  k
; A0 _7 P, M6 G
' f5 n7 ~6 y! n. R+ y- P
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。

, j  e  Z. C- m) {6 U0 W; `( C
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    , \- X( j' M& t' q1 N9 ~

  2. 6 h, H* W; H! ~6 {" P
  3. $str = "test";+ m$ c( d1 O: k8 Q- u( Q; U) k6 s

  4. " L7 s9 ]( x+ w5 z+ a
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    7 }  `8 j# \+ b4 Y& f1 j
  6. 0 A2 D1 Z9 |1 ~: K0 `
  7. $arr = array($ Z- |' o+ J2 Q4 K* Z7 l2 }
  8.      'a' => 'what',
    ( U% l1 @) y  K1 x1 T
  9.      'b' => 'are',
      q2 x, z# }$ {: e
  10.      'c' => array(7 r; a9 ?! [; L2 f  H" g
  11.          'ca' => '11',
    $ L4 x! U# B+ h* @$ _: R7 e' C& r
  12.          'cb' => '22',
    : X7 `8 {% Q0 q" c' W
  13.      ),
    / O0 Q* `  z' s# ^. M( A4 P1 H
  14. );/ C% E1 Q. J8 U; y. Q

  15. / ^# t" X7 S6 o: k( R1 W' u+ \
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);+ g7 @7 i$ G! f0 t
  17. /**
      ^; R/ S/ }6 b/ v2 A
  18. $arr1 = array(8 s* a+ M- l% C) t' J3 w* |) ~4 I2 R
  19.      'a' => 'okhat',. O7 i. Z5 B7 e. F$ _9 n  R4 T
  20.      'b' => 'okre',9 f& M& J3 F9 q/ }6 g* d8 h3 e& |
  21.      'c' => 'okarry'
    9 A7 |; `$ m, }
  22. );
    ! x) J3 v7 _+ N* X& r
  23.   */
    ) L* a& n1 y" R$ L. |
复制代码
2 [8 T% x7 L5 b
数组替换的时候,也是处理一维数组的字符串值。。
/ E+ o8 }' O! j4 s3 S. t7 i9 X4 \
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php. I8 X$ O* A1 ]+ _% j
  2. ' {) q6 f* {. i% ^3 x* o
  3. $arr = array(
    # d+ X8 h% s7 n2 A' ?+ o/ z) R7 C( @' V% ~
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
      _" ?, E8 F/ t' V: ~
  5.     'b' => 'XXX13188887777XXX',' D* s) D3 M7 R! B) i
  6.     'c' => 'XXXX918811113333XXXXX',7 i  c  W/ k; b' s
  7.     'd' => 'XXXX188111133331XXXXX'," P! @9 a& S9 V  r0 P( w0 j# X* V
  8. );
    / V0 `  g" |7 ~7 \# C8 v! {: O

  9. 6 a, j6 D( Y8 Q1 i- S2 k
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    ) k' L, m+ ~( b  U

  11. % D1 `$ a; O  R
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
    ( R/ o  e5 \; z* A0 W! r

  13. / K( |. Z. L2 |" }
  14. /**
    . l6 E/ l1 {% g4 \3 M
  15. Array& p  K4 L6 T# S. b" ?
  16. (; e! k3 y8 m& P5 A0 S1 O/ a1 `% _
  17. [a] => XXX25012349999XXX
    % D- N% i- \1 C# s+ q0 |
  18. [b] => XXX mobile:13188887777 XXX
    ' ~  H; C9 G% {
  19. [c] => XXXX918811113333XXXXX
    5 {8 `2 h* _+ s6 a# g
  20. [d] => XXXX188111133331XXXXX
    % T( e7 M9 J9 e# T# n
  21. )& G* ~7 U% E8 C9 @, t, T
  22. **/
复制代码

% `0 p- f$ p5 r6 e
2 F& E5 ~9 W$ ^, X+ U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-20 04:08 , Processed in 0.058137 second(s), 22 queries .

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