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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
9 U* u+ B( s' [8 I
strtr()的用法:
  1. <?php+ c5 {7 Q& D: P, o3 `# f) r
  2. 3 i% T4 D: l+ r9 |8 ~
  3. $str = "test";
    4 E3 J3 ^2 }, Z
  4. ' ^; m" _6 L" ^5 w
  5. $str1 = strtr($str, 't', 'z'); // zesz0 L$ i7 ]! O2 L
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    / Y5 a" P, ^. W/ ~# R& |
  7. $str3 = strtr($str, 't', '');// test. Y3 }. B  |- y/ N3 r! W( H
  8. $str4 = strtr($str, 'ts', '12');// 1e217 T1 o4 ?# o( o- k. ^; U- M

  9. : o  P# q3 |3 }' z  g" p% O
  10. ! W6 b9 s9 i' A  ?$ `
  11. $str5 = strtr($str, array("t" => '')); // es. x0 U9 g* }" I8 a) l+ i
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

* `5 \9 x  j) b# t0 s3 a* 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

9 c" f! ^, U" k5 H+ l6 y3 A+ ]
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php3 w7 M: t- N+ E- N; W

  2. ! V3 r4 Y+ k. n1 ^8 C' z9 H4 B3 \
  3. $str = "test";& @+ o) ]( h1 H* X
  4. * S$ b  v8 ]; ?. E
  5. $str1 = str_replace('t', '', $str);// es
    + C) Q  k3 L) s: q
  6. $str2 = str_replace('es', 't', $str);// ttt6 Y2 M+ Z4 ?- T+ g" e- p7 q

  7. : Z5 M1 _9 B  T/ z) t/ E
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    9 ^/ C' s) J4 h: Y1 L
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae1 F8 ~' X- h4 d; C) l( u
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa  r2 `: y- O* h0 g7 H
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    5 n+ Q; V1 h5 m  @, S
  12. - _5 W% G2 ]( _7 {
  13. $arr = array(2 \2 y; y& o, E
  14.      'a' => 'testa',
    9 p# c4 b& }4 n* F% \# R
  15.      'b' => 'testb',
    ) k9 ~( i+ O: ?* N0 N: }
  16.      'c' => array(
    % V' O; b: i% I8 A
  17.          'ca' => 'tes1',6 o2 z1 A) I  B5 d' t
  18.          'cb' => 'tes2',# P! t* s! q4 k0 U! A0 n: i/ {1 H
  19.      ),3 W2 q& w$ _0 E. Z5 c
  20. );" E( l. W& g+ X

  21. 2 b, V+ M, L1 ^% l% @/ U
  22. $arr1 = str_replace('es', 't', $arr);
    # Z* s0 M, t, w2 c. |
  23. /**% N, J4 i- S2 `3 S3 o
  24. $arr1 = array(
    $ X# c! r% l  r5 f2 R
  25.      'a' => 'ttta',
    $ w; S& i. D5 {- k+ A( d" X0 ]
  26.      'b' => 'tttb'," Z6 K9 l" ^; p, B: B1 c# y
  27.      'c' => array(
    " U" l' Y* X- [# h) y3 b
  28.          'ca' => 'tes1',
    # y" |  G6 J0 X; `$ k! `) U; v
  29.          'cb' => 'tes2',
    ( X3 A/ L# |7 l/ R; q$ Y; z# ?
  30.      ),
    ; A( w) V% d* r$ r0 s: u
  31. );% \3 X; s/ K( O4 N) G' D
  32.   */ b6 p5 @. @2 }8 a2 {' k5 L: y
  33.   *
    . {0 d8 U' q. R# ]5 o3 X
  34.   */
复制代码

& g! K7 \. j& ?, |. @- l3 e5 i  f

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

/ s* s5 ^7 E: J# e5 A8 b/ [
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php1 G* l2 r; k& F; P- H  A# J
  2. 1 T  N' w5 ]; F8 \1 B- I
  3. $str = "test";
    $ ]1 S5 e0 P4 q0 q
  4. ' Z4 {# V* p3 |& n; `3 M
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    " [. q& `1 @/ l# |5 L, L3 F* r
  6. 0 ~6 B4 _% H) V; z7 P  L/ J
  7. $arr = array(
    & p  C/ H3 ?9 c) o
  8.      'a' => 'what',
    - I& @+ ~! w% k* K) [
  9.      'b' => 'are',* C$ D- y; @' |) E; [2 T" F
  10.      'c' => array(1 ]5 e3 R! L( e& z# f% Q3 x4 ]
  11.          'ca' => '11',
    + l/ E5 O3 _8 r+ Q  e: F
  12.          'cb' => '22',
    " f# j8 b, m: O- P' M. E7 |
  13.      ),% Q/ C9 V" c' e" M& N, N
  14. );
    # H5 [6 L5 ]% C8 v0 O- u& O9 @

  15. + p) \, Q6 m5 W, ]
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);3 [& i' R* _2 ?. B4 i' a( A4 D
  17. /**
    9 t* Z: I$ f( O
  18. $arr1 = array(0 K5 x  J- h# U& @5 ?2 q
  19.      'a' => 'okhat',
    : ^1 g; X4 n/ l/ h' u: K6 z& Y
  20.      'b' => 'okre',4 l6 D3 {6 w# F6 k6 |! I
  21.      'c' => 'okarry'
    ) a( k& S% Q8 [) ~( D  _: S
  22. );  S# e  f3 f1 A  {7 L
  23.   */
    1 c. W9 C8 Z0 `4 p8 y) q0 |0 g
复制代码

9 h1 _9 O8 L  `1 i+ f8 j6 U
数组替换的时候,也是处理一维数组的字符串值。。
- q2 l1 t( y; ]( A2 M
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php% h; T0 `& R6 ~' f+ X& D
  2. / u8 N& V- T+ i/ ^9 V  E
  3. $arr = array(
    , y7 r/ `. Q/ K! N/ _) D
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头* A; ^$ j1 c/ a2 Y
  5.     'b' => 'XXX13188887777XXX',. M; f. u4 [7 c; j
  6.     'c' => 'XXXX918811113333XXXXX',; N! {; o: p, J' I7 ?) P! F
  7.     'd' => 'XXXX188111133331XXXXX',
    : o& Z8 R1 s8 ?/ q# I$ z
  8. );
    5 s0 k7 [: y5 q- t
  9. . ]' j. k$ P: n5 Z& R. ^2 d8 ^; o
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3( u3 {1 }6 u# s3 s  w9 L

  11. , L( k- X* o5 J7 r
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
    ( w6 V; e  z  u/ {

  13. 2 q8 r  n/ D, q' ?
  14. /**! i& _; ^, D! V3 f: T
  15. Array2 K$ g: @; N4 N) E# ~* W
  16. (
    8 A( g6 I: v" }( y; m
  17. [a] => XXX25012349999XXX/ c& s8 b6 z" F: I8 |  S
  18. [b] => XXX mobile:13188887777 XXX* o7 g* @0 F1 y
  19. [c] => XXXX918811113333XXXXX
    0 O' J8 l( ?# @# W
  20. [d] => XXXX188111133331XXXXX
    % g. Q: U' K* S6 T- ]7 q
  21. )( h0 ^& o2 n1 _
  22. **/
复制代码
% F/ ~% g4 [; a% S# Q1 [' c4 P8 g
1 E* J" G7 {7 _! b; X; ~2 i
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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