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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

8 e0 s9 ?- x: w  G
strtr()的用法:
  1. <?php9 x0 ?0 p: \0 l# ?4 U

  2. 7 l8 r9 @$ v& u4 {
  3. $str = "test";
    8 `' P0 f) w* k' r8 Z) [! i' \
  4. / {% B" B. Z$ ~
  5. $str1 = strtr($str, 't', 'z'); // zesz
    2 r4 ~! @* u: P: A- t  P+ f& F8 u
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1, s' t( z# t( e) Q' N. ?2 I
  7. $str3 = strtr($str, 't', '');// test
    1 D8 {  K8 m3 I6 H1 ]
  8. $str4 = strtr($str, 'ts', '12');// 1e21; D7 ~/ r6 a$ G; G, u+ p2 f
  9. , i7 M- S1 \2 a& d: g6 ?$ U
  10. ; ?8 {0 g% z; E' m7 o
  11. $str5 = strtr($str, array("t" => '')); // es
    ; B8 b( R! y2 ~2 W" @0 Q
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
9 X3 \5 |3 T& D7 n, ~
  有两种传递参数的格式,一种是数组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; E1 K: e6 g- F! E
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php, m- }6 u5 i0 ?" ?; u

  2. ( j6 l! D* @2 F8 Z- t
  3. $str = "test";& Y& B  z( K) U1 L8 Q1 E" b/ l
  4. 9 P& s/ U' W9 ?
  5. $str1 = str_replace('t', '', $str);// es  q) r6 e' K* @3 C4 n' o; ^4 i9 E5 i
  6. $str2 = str_replace('es', 't', $str);// ttt& O% k- r4 G8 L6 q8 {$ Q
  7. 5 a3 P/ y3 Q2 H2 w/ A
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    ! ?! w) J, J2 {9 s' _% l) j$ k
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    6 S% ]' m; v7 f0 {
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa/ ^2 t9 z% i# N& }. R1 c# ^* N
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    5 _2 J) b& D/ a( w% j% T
  12. 2 Q# V3 X6 ]& G0 H3 q1 U
  13. $arr = array(
    ' s0 J- l" t3 g/ @! \
  14.      'a' => 'testa',
    ! E8 [) h" y: d4 L4 h: ?
  15.      'b' => 'testb',; W9 c+ ]6 l4 f  w1 E  q
  16.      'c' => array($ P' n: F: ^* F, P" z8 z
  17.          'ca' => 'tes1',2 a: w  D# M" d
  18.          'cb' => 'tes2',
    & i$ d8 W, w5 L9 T
  19.      ),$ U& C. N) x1 f2 J) \- g! m9 e
  20. );/ D2 u' `, Z; q9 S9 W0 t4 U
  21. 5 @+ K" J( E4 W. A
  22. $arr1 = str_replace('es', 't', $arr);
    * w+ O# r8 c5 c8 h9 l
  23. /**  `' }2 h* A2 n% O  }' A, y
  24. $arr1 = array(
    , j8 F# ]$ O) {
  25.      'a' => 'ttta',
    7 ?0 H5 d% }( O. y3 J% [. U
  26.      'b' => 'tttb',
    $ W9 I( X. R3 n  ?2 A& ^/ N: l
  27.      'c' => array(* ~, V) e; D0 J! ^' J2 F! v0 T
  28.          'ca' => 'tes1',+ v- Y0 y5 z! |0 e9 T: S& J9 t1 x
  29.          'cb' => 'tes2',5 t1 `% J% U# V2 M' x7 p
  30.      ),# z- I9 K# A+ e& a& D& A
  31. );* v$ C. |) \, A6 k0 d+ r) @4 n* n
  32.   *7 A  i8 d% M$ d& }0 {
  33.   *
    ! C; ~6 r/ t5 o5 k7 ^- o# \
  34.   */
复制代码

/ r6 t/ h/ N/ L4 G
8 y; d- ^4 m4 D! x; }0 m6 A7 ]0 f( D# G3 g* A
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
' u% V7 e4 D, j" V' \% ^' H4 D' k
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php7 \9 b2 [8 Z. U. G; u
  2. 8 n& V9 R* l6 N1 c4 h; o
  3. $str = "test";# n/ R& F7 [$ ^8 a' C" u3 b
  4. 1 K  k# }3 q# s3 J7 @
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt" X+ |2 l" w. {+ C

  6. + ]9 e6 f' k+ E4 X; b
  7. $arr = array(
    ) M+ M; K% |# o# }0 P$ X
  8.      'a' => 'what',
    : G/ r( b) i4 C  D  l* ~" J$ a1 M
  9.      'b' => 'are',& M9 v% @3 c; S1 u9 A2 M  G: A
  10.      'c' => array(1 \6 d3 {" y  _6 I, Q9 V: }2 P* r
  11.          'ca' => '11',
    5 y) D" J, U% e( c' C+ n6 b
  12.          'cb' => '22',& F$ W& m2 e- r
  13.      ),. x' j5 G& q. X3 Y' p% P( \$ p* J
  14. );! t) Q$ J3 l! v4 D- u

  15. ' I% s) X/ \/ w/ z& F; }
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);  H" o+ O$ b; s- Z9 g+ f. ]. p
  17. /**
    + c$ {5 _: O6 h4 z  C
  18. $arr1 = array(6 y' \8 m4 M# x% y/ L
  19.      'a' => 'okhat',& N. e% e2 d2 F- g3 N8 L
  20.      'b' => 'okre',
    4 f+ |: m6 u& @/ _  K8 h- ~
  21.      'c' => 'okarry'
    ! Y5 C- z  ^7 r5 V6 ^
  22. );
    - ^2 @' a# w  g" b  N' w3 K! u: _4 l
  23.   */7 a4 M: M+ |+ o4 f% S& ~, {
复制代码

, Z2 J! x  `8 D: R0 z
数组替换的时候,也是处理一维数组的字符串值。。

: I) r& ]1 ^7 n! [
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
    9 A, ^2 E, ^/ K& Y: h. g
  2. & _6 L6 [1 d6 y6 O9 w% k) m
  3. $arr = array(( {* n$ V* e5 a) l0 r4 @
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    ! u8 K+ O& v( \' b0 A2 B  n2 ]
  5.     'b' => 'XXX13188887777XXX',
    ) Q8 R$ Z7 q% w  Z$ V; }* P
  6.     'c' => 'XXXX918811113333XXXXX',, m" m! Y- V" o5 n7 \
  7.     'd' => 'XXXX188111133331XXXXX',
    7 Z& w4 w  B" B4 {9 t" h
  8. );5 m) T. c2 z: @* ]8 Q' x

  9. $ D$ A9 ?4 b& q2 @4 z, {
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    # U2 a( [! b/ f5 s* {
  11. & N8 k: h$ Y$ w$ t5 u5 e; N+ p. R2 [
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号% w. Y7 L: [" O/ G

  13. " D- D" u) p( }- E  d. w
  14. /**( Z8 b9 Y. I4 r
  15. Array
    ' a- p3 E' N; P# w  G
  16. (3 z) E% ]/ a. d; m' z2 t0 O
  17. [a] => XXX25012349999XXX' [  |& @5 Z! d5 s# p
  18. [b] => XXX mobile:13188887777 XXX. K0 h3 w4 q) D( }/ m0 |
  19. [c] => XXXX918811113333XXXXX
    - b# R* j' J! E# u6 z
  20. [d] => XXXX188111133331XXXXX
    ' P* M) P$ w8 S( b
  21. )
    2 a/ q/ |; o0 A9 H; K- S0 f
  22. **/
复制代码

, D2 J' l: \6 `! C+ V% F6 H+ J" y5 U& G3 ?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 19:59 , Processed in 0.054021 second(s), 19 queries .

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