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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

& i, a7 q. R1 g& M" O
strtr()的用法:
  1. <?php: Q: ?8 E, B3 v0 G
  2. ' W8 _5 D' ]* t# T! y! G$ ]. t0 P
  3. $str = "test";+ e: E$ d4 s1 H9 |, n+ }

  4. . |! {" Q5 o7 j, I* e7 u  }
  5. $str1 = strtr($str, 't', 'z'); // zesz
    , K0 Z1 z, U4 Z
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    & `' ^! m/ n5 z" L! e4 L) P
  7. $str3 = strtr($str, 't', '');// test
    % b, [; ^6 k  W3 F
  8. $str4 = strtr($str, 'ts', '12');// 1e219 i3 x# N7 G5 I$ U2 X
  9. 0 F' `- A% T) k4 v3 E2 W3 r

  10. # V/ K( g8 n) b0 I0 o- n
  11. $str5 = strtr($str, array("t" => '')); // es: x3 K) `5 t% T; t
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

6 @: g4 @% m  a( h* b) Y* b* 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

; y; ?0 ^! K1 J4 w: D8 `
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    4 O& A+ G, L7 r
  2. 7 z& Z0 j# g+ B  f
  3. $str = "test";  M1 G( A' P* s/ f; Q4 W& X7 p
  4. ' X2 H- b4 F; m. `/ j! w
  5. $str1 = str_replace('t', '', $str);// es  @3 f+ T- I* b8 m7 x
  6. $str2 = str_replace('es', 't', $str);// ttt
    % T9 T2 k2 T: S6 {9 f6 |

  7. 0 i0 Q0 v9 L, C7 Y, d
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    % T. Y' @2 c. U' j- C  z
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    9 i5 Z; H2 R/ j6 W( I
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa  [" i2 O& F. W
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    - J1 G' D+ G: C: ~' o

  12. ) m0 n8 _; I- B6 O1 R6 t" g
  13. $arr = array(
    9 ^& B* }. \3 z# g
  14.      'a' => 'testa',0 Z, J# P. G: Q9 P4 s
  15.      'b' => 'testb',
    4 A6 ^  g5 z6 w: O( w9 h) }
  16.      'c' => array(
    , A) |: A0 L  P7 ^, C$ \- D3 C0 Z
  17.          'ca' => 'tes1',' s4 Z; }9 A/ u# B. Z7 G* c
  18.          'cb' => 'tes2',
    ) F9 `+ C* _$ v/ }8 n* r
  19.      ),
    ! E+ W0 O# i' d8 L0 N- ^
  20. );) Y; o. x; \& Y9 A
  21. 9 c. l% d! z" ~1 C' ^2 P
  22. $arr1 = str_replace('es', 't', $arr);
    ' T$ o1 C4 [. n& ~
  23. /**
    ! N6 ]- x  ]0 z8 @( m
  24. $arr1 = array(. m2 n8 y( D' W: L' t% n
  25.      'a' => 'ttta',( j6 m! o) H# b2 O
  26.      'b' => 'tttb',
      Y8 }/ f- G3 M
  27.      'c' => array(- |6 f* ~" `$ V9 h: _4 f$ V+ V1 s
  28.          'ca' => 'tes1',
    ! x* H) r4 _3 \/ i: r, N. B  M
  29.          'cb' => 'tes2',
    , [9 e& F5 c" A
  30.      ),% ^  ]8 [, ?2 j+ F" W$ N
  31. );
    6 s- Y7 [8 h- H  C; F/ h
  32.   *1 s' `8 r1 q! _) B) U1 J- y  c
  33.   *
    8 U$ v& W9 T/ L+ v
  34.   */
复制代码
2 Q' Q" L& N+ b6 C, [  R  T
- O6 z+ J# D4 N4 J
5 Z6 z, m! w1 F# U# I  M
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。

4 X9 x+ c' U7 @' j6 @
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    ' P9 i- Q" d9 L3 C! ~* K
  2. . m. R5 H5 a2 T8 h; D) ]- }
  3. $str = "test";# X) o; Z( m- f- s) R
  4. 2 u+ E0 ?- P5 s" J( e5 d
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    # o4 i+ n9 q( j
  6. ( [+ Z. H2 L, t# i  P
  7. $arr = array(
    / |+ R3 a. e  Q1 b/ p1 k* G
  8.      'a' => 'what',
    " H1 T+ `4 I2 T( c
  9.      'b' => 'are',
    ; A, m( G  v2 E5 ]+ }
  10.      'c' => array(
    * ^8 [' J1 u, v
  11.          'ca' => '11',
    # d. z! ~$ F( {. F+ y
  12.          'cb' => '22',( R' |8 _7 T+ `
  13.      ),
    # u6 ]; n7 d2 U# U1 j
  14. );
    , x' w/ w0 d! E! v: [0 _

  15. & x0 ]# ^, e3 }# O0 `
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);6 d! B9 t3 t( w
  17. /**) t6 a$ W- u4 W' y. y1 F( j% s
  18. $arr1 = array(
    " A4 Q: a  ~# s
  19.      'a' => 'okhat',  ]8 o; h: q! [+ X
  20.      'b' => 'okre',& R# o: }' h: X- K2 ~) s+ B/ W
  21.      'c' => 'okarry'
    7 G) j. l; j( A8 ]& x
  22. );' a& }2 s! w, X/ \. n' U' r5 O
  23.   */
    2 R; j, N" u- h! C/ z  S/ n# L5 c
复制代码

, q6 l. ?- ~0 x+ y# _8 F
数组替换的时候,也是处理一维数组的字符串值。。
6 j" ?7 N: H+ U  F( U
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
    ( R: A! Q9 r( ]5 N9 e

  2. 3 U) Z0 _7 ~3 q2 D2 q
  3. $arr = array(/ _$ X( S7 w# |8 F
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头, b% @  d* {! K" L
  5.     'b' => 'XXX13188887777XXX',% e  E7 {! B' j3 N
  6.     'c' => 'XXXX918811113333XXXXX',% v2 u% N4 \, o
  7.     'd' => 'XXXX188111133331XXXXX',7 o8 F, N2 n# p9 C/ W9 |
  8. );
    8 m! x6 @5 a7 p5 E; M/ Z
  9. 7 q; j3 m6 G4 j6 q
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    1 H4 c! z8 i+ U) b. E: t' K1 B; i

  11. + U- U' y! d7 D% z) N) a
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号' p4 ]: S4 ]9 N

  13. & B/ x) c4 U) h( p
  14. /*** \7 V  ?! W7 W3 p( h# A
  15. Array; j5 [1 I- `' G( F
  16. (3 _$ m3 \/ P$ B) ?
  17. [a] => XXX25012349999XXX3 ?; M" `9 x, i  ]
  18. [b] => XXX mobile:13188887777 XXX
    . p+ z! l* M' m( L$ ?1 Z4 Q
  19. [c] => XXXX918811113333XXXXX
    5 y* ]0 Q# A* ~. ?  h3 G- f& L
  20. [d] => XXXX188111133331XXXXX
    $ d2 |5 V3 v% C4 I
  21. )" ?+ o3 V" _4 c% ~7 w  w' I
  22. **/
复制代码

9 V" A, x! {5 {7 S! s' p1 D- }. ^" J* s6 @/ C  v3 `, F
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-17 18:34 , Processed in 0.110898 second(s), 20 queries .

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