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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

. j9 |( A! {9 Q* s2 u% L. w
strtr()的用法:
  1. <?php3 T# q. Z' P$ `) n

  2. ( y; w& p6 Q! G4 U. [0 u! f
  3. $str = "test";, K) E7 ^/ R" x9 y
  4. ) _7 I: ^4 @7 z# U8 f# V. L; }7 h. V1 \
  5. $str1 = strtr($str, 't', 'z'); // zesz
    % R2 ^! v: [" X. H- C
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1" R' P6 v" A& ~2 W  r, ]8 Z
  7. $str3 = strtr($str, 't', '');// test
    ( x" y4 N4 S. y  X- u- G/ h6 f# Y# {
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    ! P8 x4 g& h4 J4 Z% ~8 f+ D4 t5 T; @
  9. & K' N% n2 F3 b

  10. . f" y# \0 Y$ o* ~" Q
  11. $str5 = strtr($str, array("t" => '')); // es' v) w# Y& p1 `- W2 e# ?+ \! w
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
- n3 I" P: Z2 y% J0 j
  有两种传递参数的格式,一种是数组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
* {5 ^( k4 F" F+ T
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php9 L6 c% V' ?, N! j3 |, E$ k$ O! o
  2. % w3 `" Y& F- H' |' Y
  3. $str = "test";6 [0 D; s7 _- ]$ e, _  S3 E

  4. 8 s1 m& d9 P9 s+ M7 {! W, G3 W
  5. $str1 = str_replace('t', '', $str);// es
    2 c& i7 a( o$ a+ k3 h1 ~- i& l
  6. $str2 = str_replace('es', 't', $str);// ttt: `/ A- @; V) Z% \5 y; w
  7. / W3 @# G1 n9 I! t5 e5 T* ?
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    0 e" ~! w' i. @* b( e% {
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae7 z# b1 u# Z" Z# d  V! w5 U* \
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
    ' g4 m# v; ^' D
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee2 u( ^  q- H0 `) W6 s; Z
  12. 3 G4 o: v9 r: q
  13. $arr = array(- m/ v6 I) ^8 J5 u9 ?  P4 i" g
  14.      'a' => 'testa',
    " M/ E, H/ }% F1 n# ^, D  U
  15.      'b' => 'testb',& J  Z) h9 c1 a4 J8 R) S- |! O: I
  16.      'c' => array(
    + v: ~; G7 U. t8 Z3 ~& x* O7 ?: r
  17.          'ca' => 'tes1',
    2 O% r7 j% }& V/ \2 g7 G
  18.          'cb' => 'tes2',
    9 B0 i$ I" U4 B, H
  19.      ),0 v- P$ M; I3 w/ I) M0 x
  20. );- s& S; h, ?% g$ U( r
  21. 4 k. X5 H0 d1 G1 h4 o7 J
  22. $arr1 = str_replace('es', 't', $arr);
      d! @1 |# _, ]
  23. /**& A% X, @7 f8 e; C+ i
  24. $arr1 = array(
    8 L  l% d2 o- q6 G- Q8 g/ P
  25.      'a' => 'ttta',
      Z2 G6 x1 J4 J) w5 W! s; {  h( W
  26.      'b' => 'tttb',
    3 z. j) B/ M0 w! _! A' X
  27.      'c' => array($ I4 Z* j& U1 ?" O
  28.          'ca' => 'tes1',
    # q' `  |9 R% w6 R' v2 D1 P: v7 F
  29.          'cb' => 'tes2',: x/ k# e% `8 I; ~1 H% V
  30.      ),6 r2 t* E' ?2 c4 U, t
  31. );
    5 z9 |. o  _" T2 h& X+ c
  32.   *$ x1 ]* V7 W0 ?- q8 @- y
  33.   *% n5 D! |. i% m* @
  34.   */
复制代码
8 r; l. m$ D4 {) T5 m
6 p) z) S' v; C( \- [. j

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

4 |' @: }+ p0 W6 s" h, K
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php, G3 w6 d  D9 V! ^0 n. i' W9 l8 O/ G/ ^
  2. 5 _5 B  U( Z/ p- q6 z- F; e3 s' }. R: M
  3. $str = "test";9 g# i3 r/ g- o4 Q
  4. 2 J8 J  R- U" X) m& N' e- C/ _( B
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt1 Q" \- R% u+ e$ K4 K8 d% m! ~
  6. ' g8 u2 N6 d5 D: Y
  7. $arr = array(
    8 j1 t# C1 ~7 Y' h8 k
  8.      'a' => 'what',# P: l' w/ |/ o" Y2 ?- S
  9.      'b' => 'are',0 q& o& p0 E6 J) t- B
  10.      'c' => array(5 N1 o: D" Q4 z9 U9 \' _
  11.          'ca' => '11',7 Z: R7 A7 Z' x5 ^3 ?
  12.          'cb' => '22',' K& X3 p' o3 s3 @9 z
  13.      ),
    ' S7 b) J7 I9 O4 R
  14. );. V: |( L" W8 _3 y  d! m
  15. 2 P* b# A# W5 \1 N+ `- E
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);
    . i1 s7 T6 {3 [
  17. /**
    . Q' n7 L  M! S7 ?1 V  a
  18. $arr1 = array(: s  d3 D- S) T# N. \8 {( X7 p
  19.      'a' => 'okhat',
    ' E) X: o2 v, t9 x( V% m4 V3 r0 I
  20.      'b' => 'okre'," g9 u  }! H: @
  21.      'c' => 'okarry'& G- X' l" {1 q, i# Y
  22. );: U& d2 k" L6 [% B% r9 |
  23.   */% d- U; s4 B5 e8 w, l- n: g; i- ?0 \
复制代码
4 c; r; A- N# U6 h+ f7 a/ ]
数组替换的时候,也是处理一维数组的字符串值。。
$ A! ^/ C2 }9 F& y& Z, f2 q  m; U" m
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php' S  @1 S5 b1 w8 V% O5 ]
  2.   T7 L4 ^0 r* |, J: _) D) p* j/ t- C
  3. $arr = array(
    , j; _: u, K/ j# O
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头( F' a4 e9 j" S1 ?& A* I- X1 Q% F
  5.     'b' => 'XXX13188887777XXX',4 y. L/ t4 J, [
  6.     'c' => 'XXXX918811113333XXXXX',6 Y/ w! B# C) q2 g" [- A
  7.     'd' => 'XXXX188111133331XXXXX',
    % h4 j' [5 T0 X7 ^5 c1 S" z
  8. );8 w3 E" y" b, J: Y! O. s/ |

  9.   e+ e! e1 \. O8 }' K5 d5 d3 O
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    / N4 x5 H7 G  u5 m4 F

  11. * H' r  f: e- i- N4 O  v" k8 N
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号3 ?6 n8 \5 y2 E. l
  13. ; O- N2 b/ L" I0 [+ S. r
  14. /**7 T( a$ z7 [; F- T: [. @: \& O+ @
  15. Array
    : R1 t: b( F& i# w  {! E2 k
  16. ($ B1 C, m+ _; S! c4 [
  17. [a] => XXX25012349999XXX4 R, R, \9 c0 D' V' n
  18. [b] => XXX mobile:13188887777 XXX
    / ?2 R: k* N7 n' F4 }8 ?2 Q
  19. [c] => XXXX918811113333XXXXX0 N6 j/ {- ^" g  ]3 m8 @
  20. [d] => XXXX188111133331XXXXX/ q# L0 {% I3 `4 P
  21. )
    ( w/ {6 J' n( o1 I! Y
  22. **/
复制代码

% H& W( z% n9 B% _% H# q, v9 _* Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-19 20:16 , Processed in 0.107948 second(s), 19 queries .

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