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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

4 k7 h7 r- R( y  Q  K( q
strtr()的用法:
  1. <?php/ [- t# T$ R; K' z' F
  2. . o# W, D. n  X: B" i
  3. $str = "test";
    , Z4 K/ N' ^# C) T9 w) d* |8 F
  4. 8 k* k  h+ y6 i8 R3 m
  5. $str1 = strtr($str, 't', 'z'); // zesz
    3 p$ S# ~- b8 F, ]; ?# i
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1. W# |* @3 b$ C7 {
  7. $str3 = strtr($str, 't', '');// test
    # A! z2 c8 _" E" T4 B
  8. $str4 = strtr($str, 'ts', '12');// 1e218 f" ]# O7 i, l4 l

  9. + _4 a" N' R( ^) s
  10. $ `0 {1 Z* B3 N& W. s6 e+ S* D
  11. $str5 = strtr($str, array("t" => '')); // es
    8 z; Q  e* ]$ I: L0 M2 \
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
1 h. Q* V( v* u& S6 R
  有两种传递参数的格式,一种是数组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

, I+ Z5 E8 `$ Y- C
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php3 i( T9 \: }0 ~6 U

  2.   I8 H# A. c3 B; x' g& c
  3. $str = "test";* ^* B; S6 Y+ W0 [) D# j, r2 i4 }' l
  4. 7 O6 ^" F9 m. J
  5. $str1 = str_replace('t', '', $str);// es
    , {. o. d* h# o. T$ M6 x' _
  6. $str2 = str_replace('es', 't', $str);// ttt
    9 w- @+ F/ f5 b" Y' i' ]
  7. 9 a5 [# G2 t$ J0 x) X
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb) N0 o, j/ j% i
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    2 Q  k: W8 f$ d/ ^1 r1 f
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
    ! t4 \; e9 B* [. d' B' H
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee9 G; M' z2 L" n4 m
  12. 4 D$ r, c! q8 h$ n- |) j9 Q8 V0 h* k
  13. $arr = array(2 G+ q' a3 u% C6 A( {7 T! p+ f" c
  14.      'a' => 'testa',2 b% s6 Y; y9 v% F
  15.      'b' => 'testb',
    , s: s8 R) S: `8 f- a1 L+ i* X
  16.      'c' => array(
    % [* Z) V  }% }: E% _. `% j8 B* a
  17.          'ca' => 'tes1',
    & b$ l& U1 @  W
  18.          'cb' => 'tes2',6 s9 m7 O9 c, P" [& q- Q8 ?2 K' Z
  19.      ),4 E4 L* @7 e4 g6 m
  20. );
    5 h- G3 _0 L; s7 J( M

  21. ' V- G; K5 L9 t1 R% Q3 c5 H. U
  22. $arr1 = str_replace('es', 't', $arr);8 B$ P0 s# e! _5 d; A  B8 r" T
  23. /**
    ( e5 Y/ N7 w/ ?1 ^8 A$ d7 t
  24. $arr1 = array(% J# G* M0 ?  |3 c. c
  25.      'a' => 'ttta',
    ! e) ~; k5 ?" w7 B+ s) B* m
  26.      'b' => 'tttb',
    9 W; i( D$ }; c+ s% l' ?
  27.      'c' => array(0 q5 W( N+ `4 R4 }- B+ |
  28.          'ca' => 'tes1',- _* r9 j5 ^% D5 Y9 ~
  29.          'cb' => 'tes2',4 Q. X  @2 \- F/ b: {- T
  30.      ),2 `+ }  y# D4 u' v3 K1 U8 Z
  31. );. b" _: C" \; A6 U
  32.   *3 d6 ]  X, J( B. A5 I4 l
  33.   *! M& @' F* C- A' {. m. X) n% z1 U
  34.   */
复制代码
# d0 e/ L2 Z1 q6 D6 }

. i5 y" L8 E$ z2 g$ A: `7 Z* e7 e
; P4 `8 A  d' A" ^' N
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
1 `$ K) Z( k/ O! s8 w8 e
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php+ k; P4 B8 W& X' g3 Z9 j  A" G
  2. 6 d  C7 X2 i1 D
  3. $str = "test";) g* _9 A! ]4 w3 B
  4. 9 m- W9 |3 k( m( j- v
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt9 z& b0 z- o* B( X  h$ Q
  6. 3 i0 p/ a" b9 \  h  a' t9 E4 K
  7. $arr = array() }. |9 C0 B- U7 C  G- }
  8.      'a' => 'what',' c! x* e& b7 O5 O: J) r% R0 g; D
  9.      'b' => 'are',
    ; ~( \( E% [! A) M% Q6 E# F. Q% {
  10.      'c' => array(9 S. V6 y6 @$ i# ]. R2 ^5 O
  11.          'ca' => '11',: y+ Q6 d* s/ ]* a9 j4 m' I! Q
  12.          'cb' => '22',
    2 A. X5 d; B% N* a
  13.      ),9 u, G+ \& C8 {+ l$ K
  14. );
    7 y! b8 Q5 [3 n) o$ m/ x6 C
  15. $ T: A8 v* n, N& F, @8 K
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);
    0 z& c% s/ G9 o  |$ Z4 D; t& K
  17. /**
    2 W9 ~. j7 d: p$ @+ S- g- H  t
  18. $arr1 = array(4 f8 l- g. N- V; G3 t4 s. N6 |. a
  19.      'a' => 'okhat',& S( o4 l7 x  m" ~: f* x. g7 m
  20.      'b' => 'okre',
    * P# b7 m& ?+ S+ M* Y8 ]" |
  21.      'c' => 'okarry'. |9 `- B, t9 e/ ?) A3 q) Y
  22. );: L5 p# |& W& a. n: V
  23.   */! \/ I1 V: A$ z  Q; g2 O5 U
复制代码

! {  ~  h; F% U. b
数组替换的时候,也是处理一维数组的字符串值。。

4 P& M1 n. e9 s! P
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
    6 K4 F1 r4 c% M
  2. - I1 G, C5 ^, E3 r# i8 o; _3 \
  3. $arr = array(
    5 z$ Y- z5 f  ~
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
      x/ x2 `- A6 {1 N5 H  S* W; x
  5.     'b' => 'XXX13188887777XXX',, x' {" p4 @" z
  6.     'c' => 'XXXX918811113333XXXXX',
    + F& u" d% J# e; ^% {9 m6 E# @" e
  7.     'd' => 'XXXX188111133331XXXXX',, t/ W* d) b$ a* {2 b# G# }
  8. );
    $ R4 d9 z& N! |$ M; X
  9. " t  q) z3 |- y% a* Q) C
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    5 |# N$ i6 f9 f5 Q' v. y" w: `" F
  11. 2 V& M; F- D7 q- N/ Y: ]1 r
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号6 D, `% w  I% ^4 U: H

  13. - X1 Q: i& j4 Y6 C/ b7 T, j
  14. /**
    . E$ N6 p9 [+ N+ k6 ?/ J
  15. Array' A( H  u4 c2 [5 [% G$ M6 n- H
  16. (
    4 H8 m2 g: ~1 Z# U
  17. [a] => XXX25012349999XXX
    ) [0 J, r2 `7 v3 F/ L
  18. [b] => XXX mobile:13188887777 XXX
    1 p" u& v% J7 i/ T% |
  19. [c] => XXXX918811113333XXXXX1 n; s/ O; t" P
  20. [d] => XXXX188111133331XXXXX
    & P5 A, d: a% f' Z7 k
  21. )  w0 n  x6 p( D% z
  22. **/
复制代码
$ f: I  x9 u7 u0 w2 _
0 X) a3 L0 W$ s3 ~, r8 x+ R
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 20:21 , Processed in 0.163841 second(s), 19 queries .

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