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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

. X+ q9 h. ^7 n+ E0 u
strtr()的用法:
  1. <?php3 @" j: G( O) V8 m/ Y; f) @
  2. ( l0 b# D; R4 y$ d/ P: i- W
  3. $str = "test";. ^0 d/ ]3 \9 W6 X7 h3 o
  4. ; o- q" S# r& g8 J% t9 ]
  5. $str1 = strtr($str, 't', 'z'); // zesz
    9 y) g5 \; Z' L- N( ?* T
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    . c% b7 m' C) g( A, s
  7. $str3 = strtr($str, 't', '');// test
    2 w' T5 K; d0 P: g. c
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    5 N: B1 j, D' Y3 E
  9. 2 a" W& W- I- E! z* j) |8 u3 G% S
  10. # e' f; P& f# L3 _$ j8 _; j7 P
  11. $str5 = strtr($str, array("t" => '')); // es: E" ?+ R+ h- c# j
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
9 V" i  |; }6 ?' X2 r! O) \
  有两种传递参数的格式,一种是数组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
5 ^& s7 u5 w( }: e3 Y, ~/ P
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php+ u% o9 g4 k6 E6 U4 G$ |5 ]

  2. . N8 ^6 A) D% C. \' H+ ~
  3. $str = "test";  [6 a( j) V- w, o8 v
  4. & [! D0 q7 C) y- {
  5. $str1 = str_replace('t', '', $str);// es. ?1 [0 _. @' f3 ~) E& }
  6. $str2 = str_replace('es', 't', $str);// ttt. C; A: x  }. W7 s8 E& K

  7. 5 I$ d; p4 p9 U4 R, \
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb; l7 {* [9 t4 K4 T
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae* w/ Q% D5 C" A% ^8 ?
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
    ' x! _2 P% O2 {% S5 f
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee$ Y" c& C' n) Q/ x
  12. 8 ?6 O! ~4 P" n% |. y
  13. $arr = array(
    5 w2 Z% o3 ?# N' F! x
  14.      'a' => 'testa',
    * L4 @+ P$ J" K4 O& x% N
  15.      'b' => 'testb',7 |  d9 `  |! y  E- O
  16.      'c' => array(. p& y4 y- C3 }
  17.          'ca' => 'tes1',5 g' w3 B) w2 z2 c/ b( X* `
  18.          'cb' => 'tes2',2 Z$ ^* f# h; R/ B
  19.      ),
    - I' o8 |0 |7 O- Z! }3 G1 d0 q
  20. );9 i6 A/ b0 b5 Q  J% z
  21. $ {6 p) K9 I# o$ N; P+ y  ^0 `$ A$ a
  22. $arr1 = str_replace('es', 't', $arr);
    & Z6 f- [- D$ R1 J( U: ?$ N
  23. /**2 y( V$ L0 o/ r% X$ W" h' d
  24. $arr1 = array(5 @$ G, o; }  U$ p
  25.      'a' => 'ttta',0 o, n' E: ]1 J
  26.      'b' => 'tttb',
    ' k8 }) J# {% w  c$ x; l" L5 }
  27.      'c' => array(
    - L4 q0 t0 [2 D" ?$ {: _
  28.          'ca' => 'tes1',
    & p! a  ~. l  w" F$ \
  29.          'cb' => 'tes2',7 C) ?- ~5 t- X2 u) i6 V
  30.      ),6 r: C& O  R* r" }, F
  31. );
    & j: ?& P" [: H
  32.   *
    4 F0 R2 [- v$ z" U
  33.   *3 v) Q6 |7 @; q7 E. T
  34.   */
复制代码
) `- A5 ?0 ?9 @8 G" ~

! y8 Y: ]* n# v8 ^
- Z1 j- c5 r, R! R; L6 M5 [
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
( E  ]: b+ x, x. K3 D) c
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    . }* ^# t5 U9 ^

  2. % n3 q! C: Z9 J9 a) E/ P6 j8 W
  3. $str = "test";
    5 @3 r; Z% y& Z6 a
  4. : W2 _% n( j7 i- Q/ w
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt9 C* r4 I" c8 s2 J0 L3 \

  6. ' Z, `3 U( G3 ]" k4 n" W
  7. $arr = array(
    7 I$ P9 C) a( ]( m2 Z1 D
  8.      'a' => 'what',
    # B0 V6 ?5 a6 s2 i6 t- I% D
  9.      'b' => 'are',
    0 v0 \0 i0 e5 ?7 @" P. V% D! i3 C
  10.      'c' => array() n" \& ]; p9 L
  11.          'ca' => '11',/ \6 ?( r: b+ A: Y9 l. t  O
  12.          'cb' => '22',
    5 V8 F8 j) E+ h8 P4 `
  13.      ),
    # b0 e6 |3 _4 s  _: c/ k
  14. );
    4 C; X' v! `0 O$ i

  15. ' Y. X4 {* u2 Z6 j
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);3 w6 \+ ~- i$ i( X  P
  17. /**! V( e' P$ m8 d  U
  18. $arr1 = array(, v8 F( Y7 E. c  j; F9 }
  19.      'a' => 'okhat',& ?" y& R# z, [3 c. k
  20.      'b' => 'okre',
    + Y* B( Z- p6 `  I
  21.      'c' => 'okarry') G6 ^5 M! r# G3 P+ v$ m' l& A0 {- b
  22. );
    * w! y" D  _$ n
  23.   */; @1 ~# D# G: y. x
复制代码
' G+ k. L2 M3 @3 X9 W* W
数组替换的时候,也是处理一维数组的字符串值。。

" h, @" Z/ D8 ^  O1 @( |! b
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
      V; E; A5 S  H

  2. ( o. \" b; h0 y! U. @
  3. $arr = array(7 n. n4 q+ J8 x5 p4 i8 U
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    4 M! o! q2 w: A$ _, u# W$ c+ B. O/ P
  5.     'b' => 'XXX13188887777XXX',
    3 K# W- q) I. n; f7 X0 U9 y4 S4 d
  6.     'c' => 'XXXX918811113333XXXXX',
    & ^( x. ?7 ^# K! \
  7.     'd' => 'XXXX188111133331XXXXX',
    3 v4 \4 L) x7 c0 P
  8. );, l4 P3 s( t/ c* B  C
  9. ( d0 h1 q: u' Q, C- x9 e) g
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    2 U  p2 W6 S1 V' V2 W+ @  _& N
  11. 4 K2 z: C" y/ p' |& ?
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
    - [8 R+ X4 Q0 t( G; A& p1 y

  13. . P! w( ^1 d3 c4 l
  14. /**& \) @: E& ?& O
  15. Array$ n0 }/ Q# [8 N' O5 I2 k- r  i7 Y* ~
  16. (
    % M% x& I5 V, R* o: M
  17. [a] => XXX25012349999XXX
    ) I2 p2 m0 }6 x1 y2 @
  18. [b] => XXX mobile:13188887777 XXX
    - h' y  Q( ^# m' o% a4 t4 G
  19. [c] => XXXX918811113333XXXXX; z$ I. S2 S6 e) x  t$ T% l
  20. [d] => XXXX188111133331XXXXX
    ! E, J- V& a: o% x( l- ]0 C
  21. )
    " \5 D# B* A2 G( f1 Q
  22. **/
复制代码

% \) \5 w1 V- d* T0 m/ i9 w
- F' ~0 W, D2 d+ V: N9 @
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-20 14:07 , Processed in 0.117860 second(s), 22 queries .

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