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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

4 H: _, n- R2 o9 b9 _9 T( B
strtr()的用法:
  1. <?php: ?4 s1 I, U% W$ S

  2. # N7 Y  X3 E; C+ s4 ]: ?" n
  3. $str = "test";
    7 [/ J$ Z0 a3 m" M$ V
  4. 4 U" s& Q& X& w2 Z- u; u0 x
  5. $str1 = strtr($str, 't', 'z'); // zesz
    # S; Y3 N) @- k$ V4 w6 s, P" q
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    0 L( h; K- c( ^3 |5 r3 G. F
  7. $str3 = strtr($str, 't', '');// test3 h0 s9 Y4 Z0 b0 ]0 @7 [6 N* m
  8. $str4 = strtr($str, 'ts', '12');// 1e213 Q9 f1 ^% j# H/ t7 W

  9. $ a3 Y! @3 w- k) Y
  10. ! W# Y. p9 U) t& l' s" Y9 V
  11. $str5 = strtr($str, array("t" => '')); // es& d+ g! J0 U5 S
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
+ o5 h% ^) D7 V) {9 W0 S4 S
  有两种传递参数的格式,一种是数组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

2 b1 \, {7 O6 U$ C; P" g
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php2 i4 [  T+ b( i+ C% _
  2. , |. Y0 d+ g) H* ^9 Q' _, G
  3. $str = "test";8 H$ G; E" J( Z0 q/ U7 j
  4. 2 E% W5 [2 {$ C. ~) S7 |* T
  5. $str1 = str_replace('t', '', $str);// es/ B# m# b4 ^3 I! H# Z. ], [
  6. $str2 = str_replace('es', 't', $str);// ttt
    . K5 k9 ?- ^4 W. w2 x6 ?
  7. 7 ~) l" s& {  {7 F6 j
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    / ~$ X/ V) N( A5 j
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    2 i- x2 g1 Y/ {, t- N9 e# X
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa8 H# ^) W; e* m. ~& ?7 S0 j
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    : u1 m4 u; b* _2 w1 C8 _

  12. 4 u6 C4 V2 r7 R" Z' {
  13. $arr = array(
    , `- ?: k. D! Y( k( M* ^5 h! ~
  14.      'a' => 'testa',. |+ t1 F) Z( G) l" q
  15.      'b' => 'testb',
    2 T' C: D7 r$ R4 ~. m1 C
  16.      'c' => array(
    : J, e* {2 }) T+ Z2 j
  17.          'ca' => 'tes1',
    " d( S! S  M  B- x/ y+ f
  18.          'cb' => 'tes2',
    0 {7 z* ]& z8 U9 Z7 Z8 H
  19.      ),
    % X# {8 h4 L+ l3 @; o
  20. );
    8 E) T4 \% r+ F) F$ ]% }
  21. & t' i% K2 i7 Q4 Y  y
  22. $arr1 = str_replace('es', 't', $arr);
    0 f0 z& H* G) N/ }
  23. /**
    # l2 G+ F3 ~! T( f" G) a  f) ^
  24. $arr1 = array(
    1 v3 Z# [1 D1 G
  25.      'a' => 'ttta',$ A: d" A9 K  H" a! Y& ]% g% g
  26.      'b' => 'tttb',1 K! a* U$ r, ^* }
  27.      'c' => array(
    3 |6 ]" B3 u5 I$ T9 H, E  @1 D
  28.          'ca' => 'tes1',* ]" l6 D; T& u, {$ n
  29.          'cb' => 'tes2',
    & z8 Y! O; w/ z! f* o
  30.      ),3 {' _9 x3 d3 b8 s' G
  31. );5 x2 ]0 H/ J5 [9 s- V
  32.   *
    ! T8 w1 R8 i5 K  b; t
  33.   *
    ; n2 I/ ^: H% P$ r' D0 Z
  34.   */
复制代码
& k  E) `) H! ]6 q4 Y* c
9 _6 A8 V/ m; ?  i# C

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

. i6 O3 Q2 Z5 f& f  H8 ~
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php+ J; L2 e* m6 j

  2. 9 L$ f) ?+ u, c0 i/ @
  3. $str = "test";5 D3 F8 w7 D; |4 W" T0 H4 Z% O

  4. 9 i# H+ [# L3 l; w
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt. B# n( q  j, x: J: n4 e9 E+ _
  6. , Z1 F( X; d/ v
  7. $arr = array(
    ) U& n* v$ [! W# J! ~. f9 J
  8.      'a' => 'what',; l, [1 m2 E  B: r! N3 J# A
  9.      'b' => 'are',2 n$ ^) L4 K! H, e. J
  10.      'c' => array(
    - e( I  `# T! e2 J: m
  11.          'ca' => '11',
    # r/ V3 v. ^6 H; N  [6 p! v
  12.          'cb' => '22',, x/ `+ C1 @  }$ |: ^5 t
  13.      ),
    + j2 ?( n" D  x/ q
  14. );5 ^7 G, `* [  C. B

  15. / k- ^" @. y0 X- b/ r% M
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);
    + A# D# t+ g+ y+ P( q
  17. /**' X& V: v0 F7 t7 K! ]8 F
  18. $arr1 = array(/ D6 u# i% s& @
  19.      'a' => 'okhat',8 U# J- ^! ~( B  @: F
  20.      'b' => 'okre',
    $ R8 w$ r0 s& X/ h3 R+ d6 T9 k! ?4 \
  21.      'c' => 'okarry'
    % |/ p8 D# ~$ U$ i% }3 w" t! _
  22. );
    . o* `) _: [+ P/ K9 x' ]
  23.   */
    - B# d! q0 r6 g& F2 p- E4 [
复制代码

# M6 j) Q* q2 f. `. ^+ j
数组替换的时候,也是处理一维数组的字符串值。。

+ `. F8 O7 ]5 f) s* A
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
    # d, M' r& d" K$ N
  2. $ ?* r2 T: Q. i# E
  3. $arr = array(9 b1 _/ Z! U# M: ^( C* e* T
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头* w9 Q! ?8 O: b$ l+ L3 }
  5.     'b' => 'XXX13188887777XXX',
    ' \# g2 I7 R* }6 c
  6.     'c' => 'XXXX918811113333XXXXX',/ Q, K1 [* L# M* x' V' h
  7.     'd' => 'XXXX188111133331XXXXX',5 i  n2 F5 N) D; R
  8. );
    * x5 w2 w; ^. B0 |' P* ^! f) q
  9. 3 \! N7 E3 j/ w
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3' ]0 ~" z; u; g
  11. 6 M  [* Q  I( v7 d
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号+ i  C. @& w5 z* e9 r$ f+ N5 R
  13. " G' \& l3 Y7 B& x% Z, _' X* ~
  14. /**
    " G( q1 `: e3 X2 T( Q
  15. Array
    0 d4 W# o5 M* v' I% X! u5 M
  16. (
    6 h) \, W$ c7 v* [
  17. [a] => XXX25012349999XXX
    3 u6 o; ^# a! ]
  18. [b] => XXX mobile:13188887777 XXX
    ! }( |( }2 i9 ]. h
  19. [c] => XXXX918811113333XXXXX+ P7 ^; J) L8 x' p
  20. [d] => XXXX188111133331XXXXX
    9 R! @) R! @% M: @' L! I# B2 i) v9 }
  21. )/ s* R; m7 n! D* h5 a* S. }
  22. **/
复制代码

% @& u  W' y" y( c" f  T4 L
2 f! r% [8 e, Y, H8 Q+ i" P# b
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-20 04:17 , Processed in 0.060584 second(s), 20 queries .

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