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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
% Y5 P" Z8 c! b' {0 l
strtr()的用法:
  1. <?php
    2 y, t$ c  {/ B& [- Q; y

  2. ) L8 H- X8 x1 Q; z# x
  3. $str = "test";
    7 m! E: W8 M5 r# L$ g5 N; g/ g
  4. 4 @+ k3 Z3 Q9 c" z8 Q" c  |/ P% j8 L
  5. $str1 = strtr($str, 't', 'z'); // zesz
    ' j* q9 [8 C; Y) h+ v7 f
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    6 P' {) N# M+ ]) |
  7. $str3 = strtr($str, 't', '');// test
      o5 }% i, ~- O
  8. $str4 = strtr($str, 'ts', '12');// 1e218 t5 Q, g  ^! N0 S. k& H1 w- C
  9. 3 @4 Q! {$ _" \8 Z2 O

  10. 6 E5 A( U$ _" S
  11. $str5 = strtr($str, array("t" => '')); // es
    # u1 b# T% \# v$ _( K% x7 L# W$ _) M
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
0 Q/ ]- j) e) m9 P6 ?1 C
  有两种传递参数的格式,一种是数组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

2 ]* Q* p, r8 X  E8 \8 Y. t
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    ; M9 g6 L4 e7 A; ~: W7 {

  2. * b& j* O$ ]' e7 W# J1 l  s
  3. $str = "test";" c0 i3 o2 P% ?4 e

  4. & H/ s$ f! k/ B+ e+ H& C& i: F2 J
  5. $str1 = str_replace('t', '', $str);// es
    5 i  P9 q0 \7 f2 G  c+ T, Y
  6. $str2 = str_replace('es', 't', $str);// ttt; U- T" \! I8 c* K, Z

  7. % q3 w0 R5 B4 N( `( n) z# l! X
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    + w# w$ I/ `. W& L; p- \
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    / w  P, U# ~0 s7 S# T
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa4 d8 k( P. h+ h. j1 d" w; R: D& q1 `% `
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee; {7 ~. |; ], I8 }( L8 n# g

  12. 4 m4 y- \1 [4 E# @
  13. $arr = array(
    , Q1 B4 W$ b: i* M3 b. ]
  14.      'a' => 'testa',3 b* @# p3 ?* y
  15.      'b' => 'testb',
    ; o8 g" J8 o0 l! x$ U
  16.      'c' => array(
    - R2 u) ?0 D5 E$ W( j+ J" a! l& G
  17.          'ca' => 'tes1',5 V- Z- s) b, D
  18.          'cb' => 'tes2',7 H0 A  z& _" }9 t0 V' S) \9 i9 V
  19.      ),# T$ a" b1 i8 K" |3 ]8 q7 |
  20. );( v8 F; e  ]- A0 i  [
  21. , S  n6 Z; Y2 |1 Q* e7 {" r
  22. $arr1 = str_replace('es', 't', $arr);
    . t: }, C4 o4 Y0 U) w! ?9 s
  23. /**
    # J  |( J! \0 b1 R6 S( v4 [& D
  24. $arr1 = array(: d. i/ h3 y- k
  25.      'a' => 'ttta',$ U, z* x/ g* ^8 m# c* Q
  26.      'b' => 'tttb',0 T* {7 d  ]9 z6 u5 h1 x/ u" B0 h- \
  27.      'c' => array(- i. p; W- A# v3 x; o5 F
  28.          'ca' => 'tes1',. T" s" ]0 y3 ?, P
  29.          'cb' => 'tes2'," O: i$ I7 I9 P( d. g
  30.      ),
    3 H# S0 [1 ]% i' M( e, R( r
  31. );4 b1 `' K2 ]) M$ F
  32.   *
    ; I+ t0 i, E) Z) C. d
  33.   *
    5 M' o2 |3 S1 R
  34.   */
复制代码
  {( j5 F- Y* S6 o* _* d

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

1 {( o7 G6 C( D! Z# t
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php: h; q4 a5 B$ d/ @
  2. 0 I3 n: H4 R! E3 k
  3. $str = "test";. ^8 t3 c8 k8 c" E7 m+ ]" @. ~; G

  4. 2 N/ A4 i' ]; X& R" e8 I
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    7 P. m: q) V; ^4 ]
  6. " ^* u- c1 Z: Z
  7. $arr = array(; T% H% w" T, \; j
  8.      'a' => 'what',
    : M: P2 {' {9 P+ ~0 b8 g
  9.      'b' => 'are',
    * t" `# y" c( u" b9 t" X  o
  10.      'c' => array(
    8 l) N$ `) V) U4 G4 I* [1 e
  11.          'ca' => '11',
    " H/ _2 z5 F4 ?$ B
  12.          'cb' => '22',# |7 C4 W4 J1 @; m; _& f9 O( h
  13.      ),
    , O& a- @% P$ G
  14. );3 @# F* N6 S  O5 V6 [" Y3 J

  15. " m# V" B9 q2 Y0 G) a0 @
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);
    2 z& o) n; G  E# V
  17. /**; M) }  w) d- L
  18. $arr1 = array(6 D) A( X; l$ z- l) D, b
  19.      'a' => 'okhat',
    9 Q. m. W7 J  `9 d
  20.      'b' => 'okre',
    " T9 a/ b/ N) i+ k
  21.      'c' => 'okarry'% L2 R; z' k2 o" {5 m3 E
  22. );
    / F. W5 _7 N& r- w
  23.   */
    4 X" }) @- ^5 p: U; V, U0 }5 j
复制代码
% L4 _) h9 a- |8 f" S( W7 c* o6 j
数组替换的时候,也是处理一维数组的字符串值。。
; U9 \; y7 v9 l- g* r! z# R* q% y
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
    & Q" z2 h3 W1 m2 B6 i3 r

  2. 8 ^7 Z9 J9 R) v4 \- S+ m- f
  3. $arr = array(, R) t0 u3 B2 t' _2 X+ g7 D
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    " l$ M2 W; W3 W+ M# x
  5.     'b' => 'XXX13188887777XXX',9 Q, q* W0 m7 o
  6.     'c' => 'XXXX918811113333XXXXX',7 S# Z! t3 j5 H" u7 t  @& _
  7.     'd' => 'XXXX188111133331XXXXX',
    ' D, g2 p2 D; h3 ~6 K
  8. );7 f: X) m* O: x1 c

  9. / X) q8 W7 c( o
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    . s1 X% M* u' ?; j: N  ?

  11. 7 x7 S0 Q, h( G) J0 ], e1 ^
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号1 R* ?7 g0 m3 B9 w* M1 R
  13. 7 S& {) G' B3 p! n' B8 v/ U: d. O! _* V
  14. /**' N5 v3 _7 I, C4 f
  15. Array; ^7 X) r( l4 j
  16. (( D7 ^6 D7 B* ^0 }
  17. [a] => XXX25012349999XXX
    # ~; H$ @. o0 }/ Y" s. u; R
  18. [b] => XXX mobile:13188887777 XXX( q+ q( s* B, o- h
  19. [c] => XXXX918811113333XXXXX1 \, N6 {2 p/ ~' I2 R3 n
  20. [d] => XXXX188111133331XXXXX
    0 P2 R9 g9 P+ \* H$ \( K
  21. )
    # Y5 K3 k  d+ P, y+ D, q
  22. **/
复制代码
$ B# s" G2 b1 Q: S" z

- v. L4 r: k) W) [! {! S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-17 21:47 , Processed in 0.050015 second(s), 20 queries .

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