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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

2 }, t% O, g& b8 |5 K
strtr()的用法:
  1. <?php
    5 K8 {% U5 t3 t% r' |3 `8 Y

  2. 5 r4 k4 ]$ u, N9 _, N
  3. $str = "test";
    - ~5 n7 S* w& G5 i3 ~6 ~# D

  4. , V, Y) V" p; R# j
  5. $str1 = strtr($str, 't', 'z'); // zesz
    4 s9 u$ @/ @; t: T
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    " c/ D7 }( i' n# p
  7. $str3 = strtr($str, 't', '');// test
    5 n) i) _; @1 \/ t" N' [
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    8 Z0 m( W! J$ e% z2 B

  9. 1 w" i& \3 a" W( \/ x0 u5 i( U

  10. 3 Z$ @3 x6 g3 G( _2 J
  11. $str5 = strtr($str, array("t" => '')); // es3 n, q) Z' G% Y' W( m1 o& |
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

9 W4 ~5 W. d; }* 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
: n, v( J6 d# s' ]6 t  I' L4 d
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php# C# Z6 O7 Y5 ^! [: |- Z- M2 I

  2. $ \0 m4 r# L; M* g3 Y9 k  I0 C
  3. $str = "test";6 {1 k) l$ ~% J5 c0 Y) Z' b) s
  4. 0 F, a6 X" k- l- @% j/ r  s& `; z
  5. $str1 = str_replace('t', '', $str);// es
    + y0 z( G1 \" H( t$ h8 t
  6. $str2 = str_replace('es', 't', $str);// ttt
    % U) j1 P0 W' r) K! ?2 b
  7. , }7 G6 p. Z: V# x# f$ u
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb5 x& \( }6 V- i" `
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae% ]1 q; K* S* s" x2 N1 r9 |) g
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa* m) \: z0 `5 Z) A2 w
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    2 a0 K% E# @3 d/ @0 u- N" M
  12. 2 n) t+ I$ ~/ x& M' P
  13. $arr = array(
      U8 [$ t! f' @5 q. s0 H5 j
  14.      'a' => 'testa',
    2 r* p# E0 G* k+ H8 A
  15.      'b' => 'testb',
    1 l* A( v+ j6 t$ n
  16.      'c' => array(
    % F4 n: g; d5 i& p
  17.          'ca' => 'tes1',
    # ~6 r. g+ I" ]$ @  F. o
  18.          'cb' => 'tes2',
    ' l9 L* k! x7 f. K" i6 T
  19.      ),& L9 g$ `3 r( G; E+ r5 _+ T4 N
  20. );
    + y: ~2 d; Q; n) M& ]5 t) B
  21. 8 m7 t  u1 f9 e9 r
  22. $arr1 = str_replace('es', 't', $arr);
    7 o0 j; s) M" z% G3 D
  23. /**
    0 A5 P/ _9 I5 f4 Q5 s# g' Z' `
  24. $arr1 = array(
    / l, _3 ~0 ^8 c/ w1 R
  25.      'a' => 'ttta',
    5 h, J6 T' a& Z  R) E& P
  26.      'b' => 'tttb',
    ' y. Z5 H. r8 Y1 b
  27.      'c' => array(! k- ~: H4 `$ h0 n7 R
  28.          'ca' => 'tes1',9 }6 [: p: i4 o$ L+ T
  29.          'cb' => 'tes2',
    3 b" l; a  E. H: \: e' `& }
  30.      ),2 g  W: J* _# ?7 i" H6 n/ S1 U
  31. );
    $ @- Y" m0 V" f, Q8 n+ O
  32.   *3 Q- W0 r* r) b3 x# r- z
  33.   *7 ]9 S: k1 L  y# r: U
  34.   */
复制代码

4 H" W1 x: E2 M  K: A% w2 ^3 z5 L) [% Y7 x
5 ~+ g1 f. p) H; h
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。

' d- f4 k$ |9 b% z% ~( t
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php* ?6 [, p0 I: o7 I- H7 M( ^3 C: i

  2. 7 X6 t) b9 _& ~0 g6 n1 P  A# @
  3. $str = "test";5 M" p6 Z/ K3 ]- E; M0 A
  4. 1 V  C7 X! p+ t
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt* E* Q5 ~0 D6 F6 I: i: ^

  6. % {: g$ ~- J- Q9 W6 {, A% j
  7. $arr = array(
    ) T+ W& W/ G$ _5 w3 ?$ G
  8.      'a' => 'what',
    / k% n( J( S8 }3 \  p7 h
  9.      'b' => 'are',
    0 W" l; T' x8 F. \: U
  10.      'c' => array($ [* {; v; {1 F
  11.          'ca' => '11',- i) V3 m9 K% x! a/ B  |
  12.          'cb' => '22',3 K! N/ |5 v" [
  13.      ),
    5 V0 F3 z% k' R) W
  14. );9 f! ^4 u( s! @

  15. 9 i9 P) _( h! M9 d' o
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);: W8 {5 r4 y' v/ y- Z
  17. /**7 R# Q: W: I* `$ c
  18. $arr1 = array(6 }- y& N7 M8 c+ T( }
  19.      'a' => 'okhat',9 Q. ]. v# R( g7 B& y# S$ u, E
  20.      'b' => 'okre',, y, V; k* }# ?; O+ C/ ]" U" g! \
  21.      'c' => 'okarry'5 f# e; o% V+ q& I5 E2 P* U
  22. );7 b% ^. T$ P: E
  23.   */' ?3 G% _# B/ x& W) U; A; L
复制代码
  @; p( K3 |6 U: B$ i4 ]
数组替换的时候,也是处理一维数组的字符串值。。
- n/ M3 v" H9 ~* I! `: h& P$ N
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php4 }8 l5 c- d& l/ _  D

  2. & g* g/ E7 n8 _" e0 b
  3. $arr = array(6 O0 W% `7 {9 _, l
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    0 l/ r5 j. l! w2 D
  5.     'b' => 'XXX13188887777XXX',
    + x' C" s/ @, F2 E
  6.     'c' => 'XXXX918811113333XXXXX',
      P" T2 ~5 e6 z: f9 a7 ^( ^9 ~9 X
  7.     'd' => 'XXXX188111133331XXXXX',
    . z  b8 k$ [* s7 O; ]) |
  8. );
    3 L2 \1 ~, o7 T. X2 B  K+ u4 Y

  9. 2 `" v, b0 a# y8 _2 I  f
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3; X! ?; f! Q/ _5 R+ a: R9 U
  11. 4 p$ j% L- b" ]: K/ @5 ^) v' Z
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
    / T9 I; {$ i6 n! J* s( q1 ]$ V: T1 k5 @

  13. / X7 ?: n- [+ K: B) i
  14. /**
    ; {4 F- ?) K# w" b( C$ m
  15. Array
    % i3 w3 F1 b* i# g" y
  16. (
    % a- i3 P' T2 y% X
  17. [a] => XXX25012349999XXX
    2 N& N/ p8 M1 t8 i$ k
  18. [b] => XXX mobile:13188887777 XXX
    5 S, l# ^; N- s* ~5 ~4 k% H( Z: M
  19. [c] => XXXX918811113333XXXXX
    & H: G: }9 q$ H, s0 k
  20. [d] => XXXX188111133331XXXXX
    , W8 A% p- \- N1 x) @4 [1 ^
  21. )
    1 z! N7 N# O- i/ h" C+ e! O% u7 A
  22. **/
复制代码

& ^9 M! H/ G5 k- \0 ], j
/ H  x& G  g6 I$ C, g( d% r- s" m
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 15:55 , Processed in 0.070159 second(s), 20 queries .

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