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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
8 l% ]# X4 v3 Q9 O- C- z  U
strtr()的用法:
  1. <?php1 n6 p& _6 s8 D. B. A3 M
  2. * E- {9 H1 @" a$ e4 n$ T1 _3 d9 F
  3. $str = "test";
    ; r" v0 ?5 W' i0 v' r
  4. ) p) U( M+ u) H
  5. $str1 = strtr($str, 't', 'z'); // zesz
    . K% {) r- ^1 z3 R! ^
  6. $str2 = strtr($str, 'tt', 'z1');// 1es14 p- I) y4 X. B/ x( b
  7. $str3 = strtr($str, 't', '');// test
    # g% Z7 H$ ~* H  A  l% m' s
  8. $str4 = strtr($str, 'ts', '12');// 1e21% i6 H( D) A) W0 J( u; A7 z

  9. $ \  O; d6 Y+ u8 M, ^0 d! b! [

  10. 9 U* Y3 q, F+ ~
  11. $str5 = strtr($str, array("t" => '')); // es
    9 c0 J  w' m5 ~  {
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
) q" F8 r+ k9 H' h: k1 @6 q
  有两种传递参数的格式,一种是数组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
8 K+ i+ |' L& a
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php. i$ `" i; H5 J" y# a- f' w
  2. 8 {! u- p+ l3 c% \  b
  3. $str = "test";" e, T. y2 P+ O4 [# Q

  4. 3 ~8 k9 E" u1 ]5 U6 d
  5. $str1 = str_replace('t', '', $str);// es
    3 ^3 e& l. T4 `+ T. V
  6. $str2 = str_replace('es', 't', $str);// ttt# p. a- S+ K, V: q: Y

  7.   v( M& Z6 S5 M, ]
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    7 Q* g# ?; R, L4 z7 E/ B6 F# v) Y
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae8 l3 f# H( P2 i  Q
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa8 x8 r9 I2 F8 P1 ^5 h# y$ }
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    : L$ ^5 R0 e$ S$ s
  12. 6 n$ l# i, z  L
  13. $arr = array(
    4 z) {- [( Y3 o& F' r4 _( k1 a
  14.      'a' => 'testa',
    " A& \7 m# N" L. }  M: Q: b
  15.      'b' => 'testb',: ?: |& ~8 u# I& u! o3 z! `
  16.      'c' => array(
    ' n6 N+ U# p& `6 l
  17.          'ca' => 'tes1',
    1 k5 E& k+ u+ E$ o$ V! T1 P/ {
  18.          'cb' => 'tes2',# R2 [. {! n1 q% z' u9 O0 n
  19.      ),
    # ?; s* k* M# E7 p
  20. );
    6 C8 W: P& T. z. T0 n, n

  21. 8 s& Q: M5 a6 O( D
  22. $arr1 = str_replace('es', 't', $arr);! G9 o: ~+ f) y0 }5 C8 ~7 R& t
  23. /**( i- c8 r( Y" D7 |5 W4 K& h3 H
  24. $arr1 = array(
    ) O1 G! c: Z9 S7 ~" v+ N
  25.      'a' => 'ttta',5 q+ Q2 m' z! j% ~4 x6 N
  26.      'b' => 'tttb',
    ; T( a, Q, g9 m; P3 m
  27.      'c' => array(5 E( D( g# b, m0 O& W7 l/ B
  28.          'ca' => 'tes1',
    ( m, H: y8 P  S
  29.          'cb' => 'tes2',
    - e9 \* k% ]  j
  30.      ),
    ! H8 Y( I+ Z; m
  31. );  S8 K* m( C% v% L+ J! q2 f
  32.   *
    " K% M* m2 c8 a  P- q" k
  33.   *
      B" A2 g, p4 d) c2 b2 {
  34.   */
复制代码
0 B( c$ T, s, c7 w4 }9 R
) K7 _/ N7 O$ q5 n% a

6 C0 F, C4 p2 Q# H6 J6 K
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
# a! a3 _8 ^! _( z4 z8 E) d
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php" T0 d; B/ R5 O6 a  F

  2. ! a5 a6 Q: r2 S; F0 H4 Z$ f
  3. $str = "test";" _) K  r- w2 r" M% g3 n+ ]

  4. & D) f# ^% h* D, j' _
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    ) u* ~. k% f: u7 x+ `% {

  6. 2 [- Z, r* m: q
  7. $arr = array(# u, C& T+ A& i9 n( }2 K% l9 j
  8.      'a' => 'what',
    . e8 Y' j1 g0 A
  9.      'b' => 'are'," @$ X" I" @( M$ D  j* O, B
  10.      'c' => array(
    # B1 d- ^2 q4 t5 Z6 K/ m
  11.          'ca' => '11',
    1 K; Z5 h1 D4 K% X( T
  12.          'cb' => '22',
    % G0 E& X- m' X: J
  13.      ),
    7 I+ Q, s; Q$ m& I! z! Y. l
  14. );
    ' W7 k$ @4 @- k$ V! M# f6 c" o' ~

  15. , t. H3 _4 b: x: U" v# z0 g
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);
    , Y& E% z6 y/ V) y; V
  17. /**
    . \  l% P; O0 R7 i* I& V, z
  18. $arr1 = array(
    * R. q8 X6 Y" Y+ \3 f. H7 Y
  19.      'a' => 'okhat',
    . [8 {! s6 a& M. j! o0 M/ A  f
  20.      'b' => 'okre',7 _: w  P, b, ~0 `4 D2 t1 V
  21.      'c' => 'okarry'
    ) C: |% E. v* w
  22. );/ A, W3 ^9 i7 U
  23.   */$ J0 w& ^. O8 P* A+ c3 S
复制代码

& j4 I5 c% U' S3 G. m, p- S7 `: g
数组替换的时候,也是处理一维数组的字符串值。。

* v) a8 R/ b7 ^( V( x, [. x# u. G
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
    : m  K' _  H& e) _' |3 x
  2. # N: U/ N5 x/ @% l
  3. $arr = array(  v$ O* \( q" F, e9 ~
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头8 [! y. b' M( V& n0 \- ?
  5.     'b' => 'XXX13188887777XXX',  ?; r1 w6 |  W. x0 G+ m) O) ^8 z2 @  Q
  6.     'c' => 'XXXX918811113333XXXXX',
    : j) l9 n: o* x3 e2 i4 ~. a. q
  7.     'd' => 'XXXX188111133331XXXXX',$ }! p- N" g( c+ K8 d5 a
  8. );" }: a1 q! Z) r+ S
  9. 8 V1 @. L( A6 {5 d1 x1 I
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    * A* H3 g8 H- k% {2 S4 T! X% s: K9 e

  11. 8 O. E7 Z+ n" |( A! x. M# }+ [
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号7 C& F# Q3 [& |' P5 ^' P
  13. $ B) O& J9 C4 R; }$ Z4 c
  14. /**( N4 `% @9 c( L* q; n* X  w
  15. Array" @/ b7 R+ O- i
  16. (4 E. ~: s- T: J: B: M$ G- t
  17. [a] => XXX25012349999XXX: m% K4 `$ o+ y& D
  18. [b] => XXX mobile:13188887777 XXX( c$ E( y! t1 A
  19. [c] => XXXX918811113333XXXXX
    ( A" K- e( a% I' f6 v
  20. [d] => XXXX188111133331XXXXX7 v3 r1 J8 H1 Y; K' g3 R  B
  21. )
    # o8 E( c' k" V  Q( l6 @
  22. **/
复制代码

7 s, X4 {* ~0 N1 F3 b: ?. z0 G- r! R2 v6 O7 {1 i
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-8 11:10 , Processed in 0.162007 second(s), 21 queries .

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