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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

" R4 S$ a/ B7 O7 F* r
strtr()的用法:
  1. <?php
    ( U- G3 A2 D1 Z: Y8 p3 z

  2. ! b! I% ?9 X" ]! j$ Y
  3. $str = "test";' _. i; e! i8 F! l' q# ^* `! b% f
  4. 9 g/ |0 L) m7 m- s0 d( y7 k
  5. $str1 = strtr($str, 't', 'z'); // zesz
    + H4 }- y2 I* u  U/ }$ X7 @
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1! a/ f( x3 p; i; t0 ?- j- R7 |! \
  7. $str3 = strtr($str, 't', '');// test6 ]" D& n3 ?, M7 [- Y
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    8 r; C" C( k( s4 Z) i" X* q
  9. # e+ V2 E( ?1 b/ x) B, d
  10. 2 v+ u! Z$ _& I: e  \! m& J
  11. $str5 = strtr($str, array("t" => '')); // es6 ~  H# ?7 A& m' I. v+ |) {. e
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
1 w9 n/ n% J8 Y+ o, N/ k
  有两种传递参数的格式,一种是数组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
/ z0 T& [9 l& A9 ?0 d
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    . U0 l7 r& A7 \, [4 y0 q/ P
  2. 3 \1 R; K3 A. O! k6 f4 W+ i
  3. $str = "test";1 |! h" B9 O, U) f6 ?- d4 S
  4. ) o2 }# e* f! r0 Y1 u
  5. $str1 = str_replace('t', '', $str);// es: c# m5 x5 m( T& }" K; {' C6 `
  6. $str2 = str_replace('es', 't', $str);// ttt
    . f& h$ z3 K# o( g4 C+ t

  7. 4 V  k8 P5 C: K: {4 U* o
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb+ R3 C8 K& p4 ^# \5 K5 ^1 g
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    7 {# Y( Y/ ~- W- H/ r6 h
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa, Z+ [7 A- X# y8 X
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee; R; X5 `# m! U, ~
  12. 3 t+ i! K% Y3 ]( B3 E- t
  13. $arr = array(
      j2 ?" g8 t; c, r! Y
  14.      'a' => 'testa',
    5 F8 q: a7 |% c0 e" G; w) K5 t1 d
  15.      'b' => 'testb',+ N2 T) M/ {4 l' M; @+ A5 k# X
  16.      'c' => array(
    7 e& |2 f1 {" i+ J& ~
  17.          'ca' => 'tes1',
    , |2 e9 y" s  R' A7 J" W( Q3 h
  18.          'cb' => 'tes2',
    ' C) H% B+ V; n; O6 N  e, L
  19.      ),+ N; C- f1 F8 S( D
  20. );; B0 ~& Y$ H. R0 L, ~2 E; B

  21. $ m- O! @' N  ?1 A
  22. $arr1 = str_replace('es', 't', $arr);2 w6 {) q4 l( }% c" n7 I! z
  23. /**
    7 I: w% T; K& l/ ^1 ?# Z
  24. $arr1 = array(& Y# N& Y4 Y" O
  25.      'a' => 'ttta',
    ( u4 I1 T( U& X* y8 [
  26.      'b' => 'tttb',
    5 Z4 w: F+ V$ S) {: J' a
  27.      'c' => array(
    1 O- H; q% X- H! ~2 P
  28.          'ca' => 'tes1',6 m1 n+ p7 A& O) J' u
  29.          'cb' => 'tes2',
    ) z2 r+ ^: o; K
  30.      ),. [, `8 d. X; ]- _; |" n* X2 z
  31. );8 b: n2 k. {0 U1 Q$ t9 w' ]0 C
  32.   *
    0 z, X8 ~2 X  ]' H6 _
  33.   *
    $ U  m0 U& k# p. Z! @
  34.   */
复制代码
  C  Q7 G) E- l6 O
$ h3 H0 Q2 x$ @" d4 p
5 h* Q" s: ^2 i; D
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
1 c4 B8 e* P* Q4 B
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php  B4 Q0 f( T) @- y, {7 S
  2. . _& _' l) E( X2 |
  3. $str = "test";
    / |: T* n0 @% w; D  r8 [

  4.   P9 Q4 P2 K2 l: S
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    : |- `! S: |$ |# U" p
  6. ! O1 T# m) }( U1 M) B1 u% s+ ~
  7. $arr = array(: N  H7 a- P; H2 i6 J  J) D0 Y
  8.      'a' => 'what',. l7 A7 ~5 O' J/ y
  9.      'b' => 'are',
    ; L3 {9 \/ J! g" {6 ^, j8 k: G, q. O
  10.      'c' => array(2 L, p: D1 \" D3 D/ U7 T$ R& i
  11.          'ca' => '11',
    : G% ]( O2 h# ]
  12.          'cb' => '22',1 d* w5 x1 T2 x7 w( Q/ ]
  13.      ),  n5 N9 l9 M4 V; B% E( R
  14. );4 d4 ?# }( w$ s* R
  15. ' q2 O  _! Z0 W+ ]# T
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);
    2 z# @: N$ ]- J% [
  17. /**
    / m- T9 \/ P  [, v$ u
  18. $arr1 = array(; ?9 @8 S( m5 m4 R2 ?7 B" b
  19.      'a' => 'okhat',# `8 f/ L" T  Q; f& O* C
  20.      'b' => 'okre',* O" j( j, S3 n) `
  21.      'c' => 'okarry'
    + O9 Q0 q) X4 w( k3 A) Q6 Q
  22. );
    . E1 ~! W9 \1 u
  23.   */
    3 K# u3 a8 R- P2 @4 |( ^
复制代码
$ ]. z. h* g. g/ c& J- b) c
数组替换的时候,也是处理一维数组的字符串值。。

6 S) U4 m' \) ^1 X" b2 d
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php9 t8 j# p+ c! L+ g# L
  2. * o( {0 l% B# c
  3. $arr = array(" _, J8 u. w/ N# n4 B. a
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头) V6 }6 u+ V4 G8 W' K7 g/ [
  5.     'b' => 'XXX13188887777XXX',; g7 Q& U1 Z1 u9 t
  6.     'c' => 'XXXX918811113333XXXXX',: Z; _1 Y& i/ Y5 i5 ~3 g6 E
  7.     'd' => 'XXXX188111133331XXXXX',
    # S# U& h- c" M; c
  8. );
    3 D. s# F9 w( r

  9. ! a* `5 [. ]3 t2 f$ [/ Q2 u
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3# O1 |- ]% [; c5 o2 ?

  11. 5 p6 ?6 K) H- `
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号+ r- [, K5 c$ ^- q/ Z4 O3 W

  13. 8 l. r4 f9 l9 f/ h6 s
  14. /**
    & y& _8 g, a* j# T1 g# K5 x
  15. Array( q+ |6 X5 O; l( v
  16. (3 u+ M0 F1 _8 g! l) i! |
  17. [a] => XXX25012349999XXX
    1 q- a+ D/ ]* {: }/ f, k; q0 {0 i
  18. [b] => XXX mobile:13188887777 XXX! [& D& j7 A9 \1 G: Q$ @
  19. [c] => XXXX918811113333XXXXX9 B4 p% ?" c- O# G, [
  20. [d] => XXXX188111133331XXXXX
    * O' ]' Z6 b% i* D' X
  21. )/ E# g/ L+ a- w" m, k: ~. i- j
  22. **/
复制代码
" f: k+ Y+ r$ E* J% c& A# Y9 ]
4 V3 ?  {; s0 G# Y6 c# x% ?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 19:04 , Processed in 0.057873 second(s), 22 queries .

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