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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
* {8 z8 j) M: q9 h7 Q
strtr()的用法:
  1. <?php
      |  Z) H5 p8 J( x- y) ]# P

  2. ' L& _# w6 t3 q- f3 H, P# G
  3. $str = "test";: T2 z" }- s, U2 `5 e$ c  I

  4. : i: ~2 m: P2 Q" g9 o6 T& A
  5. $str1 = strtr($str, 't', 'z'); // zesz3 q% X9 Q9 b4 X
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    " j/ C( n' c2 W# e
  7. $str3 = strtr($str, 't', '');// test
    6 m$ w. i, S, p+ d1 d4 N
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    9 f& o7 |4 Z' W6 c
  9. 8 G( |; j" s" K; m* `" n
  10. 9 C( J# m0 I8 B7 u
  11. $str5 = strtr($str, array("t" => '')); // es8 l% h7 ^9 c9 ^* d% a8 b) }
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

1 P4 X3 p' y8 \  O9 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
+ P9 P/ D, g5 S3 B
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php# I  x; r  J* y. @1 e! D
  2. 2 i' K' W6 A- d7 w6 w4 ]) X
  3. $str = "test";- r2 N) u5 u2 n' S

  4. - f- a! x% N- s" C7 K
  5. $str1 = str_replace('t', '', $str);// es2 w8 w+ u$ `' q% }0 X) e+ h
  6. $str2 = str_replace('es', 't', $str);// ttt
    & z9 C2 S6 Y8 h# K' t& I9 u

  7. ) G! k/ f" R3 x0 }6 e( B! L
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    . l' F6 u# q5 l& s
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    8 C' ]) _3 T% R( n8 u3 u4 R
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa6 b. O6 O( `- U$ G$ V
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee' Q( G& m2 N3 S

  12. & B! t4 q) F7 m+ x1 k  w
  13. $arr = array(, m) y4 c( ~+ ]# b* z9 o; B
  14.      'a' => 'testa',
    # n6 y8 G+ K9 U& C
  15.      'b' => 'testb',7 X' X2 {, U3 o& u: d( C
  16.      'c' => array(
    1 }1 b( }1 S" j% E- t; x
  17.          'ca' => 'tes1',. c0 f/ X3 p$ U! r
  18.          'cb' => 'tes2',
    " p' x3 e$ M" O+ t  O
  19.      ),
    / y# h: K/ n+ F' ], n; D
  20. );0 ^( J  w! L( K9 E

  21. 3 I& @7 t  W4 \' x
  22. $arr1 = str_replace('es', 't', $arr);
    1 u6 p2 X" @: w; t/ ]6 b
  23. /**' P; q& ^# ~2 @" D
  24. $arr1 = array(
    2 I: v. ^4 B/ l9 {4 c. ?
  25.      'a' => 'ttta',
    0 K# X0 [3 A  c
  26.      'b' => 'tttb',9 u/ v  Y. t8 b' N8 t  C
  27.      'c' => array(# d  P: t' H9 P/ P/ F& c
  28.          'ca' => 'tes1',
    0 w0 q# B; A7 C% s. H
  29.          'cb' => 'tes2',
    , a( t! Y5 A# M5 z. p
  30.      ),
    ( a" U( [) M2 g( q9 s- K! u
  31. );
    + d* `0 q3 B/ o- f1 _/ J
  32.   *
    : p' I) a% G& j
  33.   *
    9 J4 r+ ~7 u& i5 B# Y" p
  34.   */
复制代码
% B1 G6 L. h$ d$ m" ^4 E3 t3 l& E$ w

% W; ]3 f+ y+ _2 _, P  h' x& s8 _7 B1 c+ @: ~( U
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
. h; b9 F! @9 D. g* w
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    4 z6 B( a0 x4 C# v, X
  2.   ]: F% g( o" e* G. F2 L+ b' r7 l
  3. $str = "test";
    . C2 Y5 j0 Z! V" r0 k

  4. 4 I4 b; D  |6 c5 O
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    2 y6 J, B7 `. o( W# y, j( b! g

  6. * d0 t0 @' ~$ P# w
  7. $arr = array(0 G. m: Q* n( H5 E1 F2 H0 X* w; Z
  8.      'a' => 'what',
    . H& Q+ m$ Y9 a+ w  _( H/ R& j- U- X
  9.      'b' => 'are',: f8 j$ W4 K& Y1 v, t7 _
  10.      'c' => array(9 E; ^% O: _: S
  11.          'ca' => '11',
    6 |, v' z+ p/ b6 u9 T
  12.          'cb' => '22',. k( L+ G" d. _) g  j
  13.      ),9 ?+ V" `; a4 Z& `1 R9 R
  14. );
    : B1 Y$ R8 V6 Y, I

  15. % M: X% ~+ l& x7 ~/ p) E  c% F; a3 t- w
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);
    : t/ L! |& G0 H/ _
  17. /**
    ! M$ Y7 a% \7 n9 h) v- [
  18. $arr1 = array(9 H, r8 ^# O8 G) K
  19.      'a' => 'okhat',
    1 ^1 `  T0 J5 @) ~3 v& }) O
  20.      'b' => 'okre',
    : @1 I" F" Q/ I2 U& ]3 O
  21.      'c' => 'okarry'
    , V% g8 b& Q( E7 |, R0 x1 W
  22. );
    & K. T. e9 v: E  H* j
  23.   */
    - s! W( z" `; Y/ i
复制代码

3 J9 }2 ~9 e( p' a4 r
数组替换的时候,也是处理一维数组的字符串值。。
- n0 E% f2 I/ q/ J1 u4 c0 q! t
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php; ]. m. P/ b3 R- Z

  2.   G2 W9 T* w+ ]# Q8 q! D
  3. $arr = array(8 H4 x% c: \! y$ T) [- o- a0 F
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    4 }5 y; N- w) l" w# {9 ?
  5.     'b' => 'XXX13188887777XXX',- A; [: C. h7 O
  6.     'c' => 'XXXX918811113333XXXXX',; H5 N# I& a$ f' s1 K. z
  7.     'd' => 'XXXX188111133331XXXXX',
    - U; b/ }) u, y! G1 n! u0 ^7 m
  8. );
    ( J2 M2 o0 s  Z8 d3 O

  9. * b1 C: [3 M, m5 u. V! ^* g
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    7 Y! ?; I; S* G. p

  11. - S- U% ^/ `5 j- u5 _7 c' [  F
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号6 m- c: Z" ]3 A# F
  13. + b2 c* T+ W* ?0 y! O# u5 \
  14. /**0 D6 l) L0 |5 g- a7 o  W9 z
  15. Array
    ; ~; U+ n6 I) Z  I* K7 ?6 U# p
  16. (
    9 e. g6 f0 J2 A' r
  17. [a] => XXX25012349999XXX5 b. r: K& S8 G3 c% u# m
  18. [b] => XXX mobile:13188887777 XXX
    ! J' P" @0 L/ f; L. \" B3 d6 d& r
  19. [c] => XXXX918811113333XXXXX
    - [; b# v& w- d+ E, B1 o: ~* `+ t
  20. [d] => XXXX188111133331XXXXX
    . v% x5 H( g5 q+ S; f
  21. )
    , ^6 a4 w& C7 _- Y5 X( d1 ^
  22. **/
复制代码
" N. I/ s6 x. O
2 f. X1 j" ^8 `4 u7 t; n% y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 11:37 , Processed in 0.052923 second(s), 19 queries .

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