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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
# G: g4 s. F# [  K" G1 K2 t- j+ p
strtr()的用法:
  1. <?php
    : u4 p& s$ B! s/ n# K. a2 g) H

  2. ( k( ^; k6 G5 u3 T
  3. $str = "test";! t2 ~( b" l# ^7 V5 o

  4. 5 E+ i4 C( H0 _" X- i2 _: U/ i. s
  5. $str1 = strtr($str, 't', 'z'); // zesz
    3 h# \  w* H  J% O+ J
  6. $str2 = strtr($str, 'tt', 'z1');// 1es19 t* ]9 p: s8 a1 S1 f- ]
  7. $str3 = strtr($str, 't', '');// test
    * q. A! S3 j. J. u8 x
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    * v- x& c) R% W- |) |: C

  9. # P  d& P# A# G7 l2 e% k
  10. ! s- ^: ~: ~9 r1 F) O
  11. $str5 = strtr($str, array("t" => '')); // es
    6 g* I: v2 U, e, t5 T/ j* ]
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
1 [: I& u% @5 I) [
  有两种传递参数的格式,一种是数组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
- o5 G, F* S% N; {0 {- y2 k* M
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    " Q- Z- L  B2 b& R; |  h" y" d) H

  2. 6 ~7 y% P9 D$ y& f( {+ w" ]
  3. $str = "test";, x6 {& d' J! P! _
  4. $ h. s  a$ e2 u( q; n% W
  5. $str1 = str_replace('t', '', $str);// es
    ) E) x" \( ~) i- I& y6 B
  6. $str2 = str_replace('es', 't', $str);// ttt
    ; w! S; e3 b7 B6 U1 r
  7. 9 [* B+ k5 v0 M' Z4 F  z( M
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb8 m; X, D; S% u7 ]4 D* R
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae: w: w9 X( R# `& Z- m9 f7 o
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
    ' T" [6 g, S" x) S* G
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee! i& O! h$ g4 g6 U! _, K

  12. 5 P6 c6 }' g2 l7 g$ b" j( }
  13. $arr = array(
    * r5 f9 ?' V+ v  f3 p+ h
  14.      'a' => 'testa',
    5 O% P; o2 G/ G
  15.      'b' => 'testb',
    ) ^  P- S2 S$ p, {7 g% t
  16.      'c' => array(! g4 t4 o2 w2 ^; j8 `0 x' f
  17.          'ca' => 'tes1',6 H1 d) A$ i/ i4 J0 Y/ u
  18.          'cb' => 'tes2',
    + Y  }0 f. P2 x% b6 \
  19.      ),
    $ r/ N) H; G6 r. x/ p. o
  20. );, T! U  e9 ~& b/ v" ^

  21. : V5 F+ O. D/ T: n8 T
  22. $arr1 = str_replace('es', 't', $arr);$ ]5 X( G" H; W7 W" k1 D7 s
  23. /**( E9 p" I1 {7 L% X+ w
  24. $arr1 = array(& O! T; n% G" T' b
  25.      'a' => 'ttta',' m% p! \1 G/ P! c" T1 S
  26.      'b' => 'tttb',
      p+ W2 ?) v, D$ {/ Y
  27.      'c' => array(
    8 y% [* o( k/ V: K+ S9 s0 D3 u
  28.          'ca' => 'tes1',) Q. R' q8 U+ z1 P$ E1 k; k# w
  29.          'cb' => 'tes2',
    ' @2 x  f" O, z. k/ c$ I. V$ ]
  30.      ),
    # J. O  F( S- L# ^2 k; A! {
  31. );
    : H  U, o! s7 Y) x. E0 R
  32.   *
    . l3 k0 t. C! h! E8 x, b
  33.   *
    & A1 z$ W0 ^! @# P& k
  34.   */
复制代码
/ H; Q6 L9 s/ e- q2 D) O, ]

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

/ v7 x8 E5 d6 k- S$ i4 h
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    " ~9 Q& f) p! a. {  c
  2. * F# m" v9 T3 i5 N9 y3 v
  3. $str = "test";6 d+ v" p6 N$ O  I' j
  4.   ?+ z; E- W3 q( S2 I
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt4 M* g4 v3 e7 [$ r. S- x

  6. , t1 l7 m+ }! G& |
  7. $arr = array(
    * W+ X* i  O2 M% a, a. Q
  8.      'a' => 'what',$ ?2 b2 o: ]8 m) B
  9.      'b' => 'are',: Y& \1 T; o% I$ D* t
  10.      'c' => array(
    % \( N: x, c( J% }, N% n7 \: f
  11.          'ca' => '11'," ]  L) y: L* n- `0 m+ D
  12.          'cb' => '22',: k: q; I& X2 r% Q) x
  13.      ),
    " h: B+ ~1 Z  @* o5 i! M9 s7 Z
  14. );! I8 X( d& t+ C; c) v
  15. 0 O* J' ?# l; M( ^7 H) [8 V
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);( m9 d: w- N; u( d8 _$ U  Q: [2 I
  17. /**
    6 S2 H. w2 D' G8 ]7 j3 X% C- q
  18. $arr1 = array(
    ) ^5 w" {; t2 ]
  19.      'a' => 'okhat',1 z) S0 k1 K' b: J) S4 u
  20.      'b' => 'okre',
    ' V; K7 P/ U" ~% K5 I
  21.      'c' => 'okarry'+ o3 Q  G0 V* m1 Y8 }
  22. );
    ' q) n* X4 I5 S' M2 _( V
  23.   */
    1 K4 v! l1 {) w9 S7 O3 N5 I: A
复制代码

1 m# O) P& b& S5 Y+ \( a: }- F$ i) d
数组替换的时候,也是处理一维数组的字符串值。。

9 q; @6 r/ E& E  Z; n" P
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php5 [+ p# n+ Q1 O- m/ j+ Q
  2. 8 Z% n% `4 z8 r2 {0 y
  3. $arr = array(
    2 x- o0 G/ U$ A
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
      o9 Z" p4 G( T2 Z4 _3 z
  5.     'b' => 'XXX13188887777XXX',) W- {+ X5 l1 W, O5 O* Z  K1 R
  6.     'c' => 'XXXX918811113333XXXXX',0 A# E2 `( ~" o: c4 m6 W' a& n2 t
  7.     'd' => 'XXXX188111133331XXXXX',9 V% W3 N; ~6 |* K* m, U
  8. );* N* j: x) b; [( O8 K& Z
  9. : A+ I& E- M1 l+ ^9 M3 L
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    - d8 H1 ~1 f# y# q; x; N
  11. 3 a. Y- }) y* V( H& u0 _. X. e
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
    * {$ ~9 A- h0 x
  13. . f2 ^: E3 L/ t4 i$ a' q
  14. /**
    5 ]0 e% z0 N& X: d  C+ t
  15. Array
    & a  I. `3 j) ^! S+ |, R0 P9 Y
  16. (
    ) n6 N) q; ]; E) C, y; Q% M
  17. [a] => XXX25012349999XXX
    6 E  N* D7 O& j% f- W, q, }5 ?
  18. [b] => XXX mobile:13188887777 XXX) O- v4 `9 [9 N3 D8 J1 @
  19. [c] => XXXX918811113333XXXXX1 Q2 H" S  W1 ^! Q0 ]- x; I
  20. [d] => XXXX188111133331XXXXX1 B* o. c0 T* A. Q# h3 _+ @6 e, O
  21. )5 k- ?1 D. Z! s! n1 b
  22. **/
复制代码
  V& e# H  \7 K0 T5 I

6 K- u9 I2 f) Y% u. \0 n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-19 23:03 , Processed in 0.106592 second(s), 19 queries .

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