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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
. h5 ^: ]/ ?1 t3 B. k5 K2 l
strtr()的用法:
  1. <?php3 @; |7 g/ N1 f: d/ T0 j

  2. , {  Y1 K- S  G8 M
  3. $str = "test";
    + y4 k9 O8 i; L* N' `: @

  4. ! _3 J. ]# X$ V: v7 X# }
  5. $str1 = strtr($str, 't', 'z'); // zesz
    % B4 g0 H& P- i% R6 l
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1  c6 _8 [6 ?) l, Z# b" K' \* X: `6 |
  7. $str3 = strtr($str, 't', '');// test
    ) i5 C0 V0 [$ y+ b% ?1 j
  8. $str4 = strtr($str, 'ts', '12');// 1e219 o1 g' T/ z9 u; A

  9.   ?' T2 E" X( n* d- H
  10. " v  [' X9 q# x# J) b1 a$ ?
  11. $str5 = strtr($str, array("t" => '')); // es! q3 j% {) T$ A# j* g+ o4 A
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
; d+ y) R6 a/ ~' |, ?
  有两种传递参数的格式,一种是数组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

) f. J" O# x% m+ C. Z6 y* a6 e
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    0 ~/ C1 O% Q9 ~( z) ~' A; Z3 S
  2. ' F% D3 s4 S( t5 w, i7 c/ n1 l
  3. $str = "test";
    ; h5 _6 T- X( d* |( t. V5 M
  4. ! Q4 ?" }4 I' w/ n  _! O
  5. $str1 = str_replace('t', '', $str);// es$ b8 L) R$ e1 v: H; v: ?% U" Z
  6. $str2 = str_replace('es', 't', $str);// ttt: o4 {# r' N! _& b. z# k0 ^* C

  7. : r$ o, h. W5 t7 F* Q" c
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    5 J6 r8 w: t& z
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae8 T; F. F! n/ V, o* B
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa7 \  h+ R# o5 p' E6 |: t% N7 S& f
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    ) {! g; {' t; U. e& j3 U' `1 Q$ v  i

  12. & D$ e7 ?* \! T2 c
  13. $arr = array(3 K  n% m& }' Q1 q5 w! L
  14.      'a' => 'testa',9 l: M/ {. H. r  X. A4 Q7 E* T' b
  15.      'b' => 'testb',5 ^2 l2 K" w: H6 I
  16.      'c' => array(
    0 {  F8 }/ s% A. t( |
  17.          'ca' => 'tes1',
    1 [( T( Y$ }" F! W! K, F
  18.          'cb' => 'tes2',( r6 z0 Q1 M0 l1 i& @% P
  19.      ),  j- y! I8 [6 i$ Z. O, o
  20. );
    ! d! |+ D- k" ^

  21. 6 {2 W1 H3 u1 x3 m, \
  22. $arr1 = str_replace('es', 't', $arr);
      ?1 @% G1 Q+ X, ?  H4 _
  23. /**
    ; _) I, r  V, k
  24. $arr1 = array(, t, w( V$ C1 R$ `3 r
  25.      'a' => 'ttta',, `8 z, C- U" R, B7 v# F
  26.      'b' => 'tttb',
    7 t4 U2 _" y8 z" F. i) A
  27.      'c' => array(: B' ~- m: k5 `
  28.          'ca' => 'tes1',
    0 U# }+ T0 L! |. r
  29.          'cb' => 'tes2',- z1 D  @8 [1 x1 x
  30.      ),
    8 P& @; _# C0 r5 I! s, y2 a
  31. );4 M; A2 c+ Q) n9 r$ W5 t
  32.   *
    ( b1 Y4 Z( H0 t( j7 d
  33.   *9 y1 f1 l. e9 j2 K
  34.   */
复制代码

* j" C$ \$ `7 {# k9 S5 \& G/ x% `4 @5 i0 \3 j8 d

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

  a' O, n( \4 D1 z! G3 M/ T( I: I3 k
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    1 h. S5 k4 }- @# q1 e

  2. ) G! r% [! k0 n! m: Q
  3. $str = "test";% z) I( i) T, n; S/ ^! s
  4. 6 S) U4 X/ b% m1 Y; }9 \
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt6 C, ^; E7 s( L" w9 ?/ ^+ a

  6. 7 r+ B9 y' {- ^, Q
  7. $arr = array(9 X3 J& V. @& x4 l
  8.      'a' => 'what',% |4 C$ g& T! _: ~; \1 m* {$ d
  9.      'b' => 'are',
    5 r; j4 u  a: l4 B
  10.      'c' => array(. L. m" I. w/ O2 D
  11.          'ca' => '11',4 ^3 Y4 _, P) }8 e& ~3 Q" j
  12.          'cb' => '22',
    0 e' d3 ~0 x' H! N7 q
  13.      ),# s3 r& \* P$ z% f0 O
  14. );* b0 p8 k$ `* B1 j" H) i

  15. 0 A4 x  C$ f) _, W2 ^* E8 n
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);
    2 j3 U, Y7 |5 \: d& {
  17. /**" t' j! [& a9 G' |& M/ o
  18. $arr1 = array(: O' l) [/ n$ Q, j+ X
  19.      'a' => 'okhat',0 H2 U$ X1 a8 o0 q) s' O
  20.      'b' => 'okre',
    & v. e2 B0 e  q, x% k) u1 Q
  21.      'c' => 'okarry'
    4 |, Z/ d/ y% ^* }% d0 b( f
  22. );
    + @  K, D1 |7 Q" I
  23.   */
    , f' u" W# f2 S6 S( M2 D
复制代码

4 z: u, C  @' X9 ?5 q7 `$ L9 q9 C2 k% K
数组替换的时候,也是处理一维数组的字符串值。。

! \$ K. ?* m" P' F; K" _  J
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php5 M& ^" t4 x' o8 h, }. w! I* ^$ o
  2. / \* [' F6 e( S+ z& Y/ i6 ^( {# c
  3. $arr = array(
    ' B1 N' \  {2 o) n9 `- E7 n
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    * c* q* E! g$ U' u
  5.     'b' => 'XXX13188887777XXX',
    * q8 R4 }$ Q; X0 S. F
  6.     'c' => 'XXXX918811113333XXXXX',8 D! Q& \4 O" o4 Q
  7.     'd' => 'XXXX188111133331XXXXX',
      W" ?8 t0 l% }. d! [6 X
  8. );
    , r7 ^3 g& o: H' F0 ~  H

  9. 3 S4 S8 c/ ~6 {) b" D# w3 B& }4 y
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    3 ^  m$ e3 k8 t, K) O$ V! P

  11. 6 h, M  T" P9 m$ W5 i2 S# U+ f
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
      C- c, |( k: F/ \

  13. + z' Q; i) d9 m& V. `. B
  14. /**7 s( `# n7 A, t2 [9 p* a6 ^
  15. Array
    ! P' q$ E6 w: ]! J
  16. (
    . y+ k0 D+ ^7 X3 {0 ?8 ~* z5 y) b
  17. [a] => XXX25012349999XXX
    6 X; ?  v/ X; b$ t4 J+ k
  18. [b] => XXX mobile:13188887777 XXX
    5 S0 n8 P" [6 I  E( s
  19. [c] => XXXX918811113333XXXXX* M* O7 P2 ?0 d: `
  20. [d] => XXXX188111133331XXXXX' ?1 z* Y6 e/ j* O; F  [, D: y
  21. ), r0 w4 \- E; @* T# o$ ^
  22. **/
复制代码
& L: T" v2 c/ [3 P/ d
) W5 b% R& a4 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-19 22:41 , Processed in 0.061199 second(s), 19 queries .

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