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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
% W7 w' _7 A% H. s
strtr()的用法:
  1. <?php/ D9 }; l" x4 W$ \2 t- X. T

  2. 8 d/ K7 e# w( f+ A" g6 l3 h% G
  3. $str = "test";3 E4 p6 s+ V1 ^" T

  4. " H/ z4 x& M5 |" ?
  5. $str1 = strtr($str, 't', 'z'); // zesz) J9 }; M4 q5 y3 ^9 \5 L3 O4 t, Z8 A
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    0 Z' S  ?0 F8 A: \
  7. $str3 = strtr($str, 't', '');// test) {8 {  O5 z( s, M( @( s
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    ! N, z% Y4 X8 J# `4 o$ P& z, e6 Z

  9. " I* R: h% C; A6 b: c' H
  10. ( ^; I! g) j# Z
  11. $str5 = strtr($str, array("t" => '')); // es/ I6 ?7 {- u6 C* `9 X" V2 q. R- o# y) |
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

: u+ |7 K) e8 o5 r
  有两种传递参数的格式,一种是数组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

9 g, G6 t6 I6 t1 P1 I
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    , S; W: D2 G1 s

  2. * J4 J& V# ^3 S
  3. $str = "test";
    ) O% V5 P! j9 q3 b# M: E; v! C

  4. / G: d( x/ X: l0 ?# E
  5. $str1 = str_replace('t', '', $str);// es0 _3 ?& v) O2 L# u1 _" a& s
  6. $str2 = str_replace('es', 't', $str);// ttt
    4 H$ n0 U* @$ K/ }5 v3 X: x
  7. : k. F; e: w& H2 l7 T
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb1 [6 q* B: n/ ~  ~* ~
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    ; A5 F3 @+ }6 r. ^
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa7 Y+ {, |# `) i+ n/ x4 P5 n
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    ! x# d. I" ^, A( a+ z
  12. 9 \  Z3 x9 [! r$ U# e; Z) r
  13. $arr = array(: F) M( D* S9 C9 L. ~$ S( ^! E
  14.      'a' => 'testa',
    5 S2 J8 ~: P3 u- B3 G- m
  15.      'b' => 'testb',/ h* n* n( y  J$ o. j' Y2 |+ H
  16.      'c' => array(
    $ F6 N7 `9 \  q+ E6 N( K& G( D
  17.          'ca' => 'tes1',5 I7 y2 t2 I7 }8 g1 a. q
  18.          'cb' => 'tes2',! e& a* C. z' ?7 Y  l, Z
  19.      ),2 ^2 g* Q  p% C$ @0 w/ i  O- n
  20. );+ [7 @# X8 _$ E. d

  21. & g" G6 u) Q6 D% s2 w5 O+ w  @
  22. $arr1 = str_replace('es', 't', $arr);  i. z9 O7 b: z* N& u& B
  23. /**
    3 @& u$ Z2 O" G2 ^5 e" Q4 A9 \
  24. $arr1 = array(
    6 `; s! ?) H8 U/ S1 u# w
  25.      'a' => 'ttta',
    8 L- W, N9 s0 Y( S7 g) t0 V. ]8 E
  26.      'b' => 'tttb',3 P2 Z& U6 j$ p
  27.      'c' => array(' l0 [' y( |) I: P, \6 L
  28.          'ca' => 'tes1',3 @/ k* j- Y' o5 O7 `8 d4 I
  29.          'cb' => 'tes2',
    / e% @( `8 U7 g/ V8 |) k$ _/ S" i
  30.      ),. T0 l; K5 b: V
  31. );
    * _- b7 ]& C' C
  32.   *
    ' C, v. s, @# y: }7 T$ m
  33.   *" [4 N- w! H: I4 o2 W6 S) H
  34.   */
复制代码

, r& ~8 H! j+ k* i3 V' e+ d. l+ i% |4 l
/ p- R. x& H. I) l3 F- E; u9 v7 i
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
* f5 w. P, [' U6 [4 {
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    ' e. H' U6 o# p, U- `( z2 z

  2. # t$ A  n% }  U$ I
  3. $str = "test";
    7 T4 D# M, ~# O- e/ }) R: X
  4. : Q. I: k, w2 `/ {. H  o
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    : w0 E; z" |3 E& C
  6. + g& D- L: k0 U8 ?3 [$ v/ B+ O
  7. $arr = array(
    : S  `6 j0 l* ?# {/ G
  8.      'a' => 'what',9 u# U/ W# P2 g+ O9 X0 x3 n
  9.      'b' => 'are',. Y$ B' f2 d6 k( r) B  y& J
  10.      'c' => array(
    7 Z  I# {. J" G6 n: Z  Z, I" ^
  11.          'ca' => '11',
    ; p. c  d  I( ]: M0 u! [
  12.          'cb' => '22',
    : _2 H9 m  C! {! g. ?& u
  13.      ),9 }4 a5 M) _" i. s- I3 }) T  A
  14. );
    5 G0 E& D' N# P7 J7 x/ C0 _
  15. ! @5 r5 a9 u3 O: f" N
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);; W3 `! P) x( R2 o2 y
  17. /**
    6 _9 r$ e0 C- {+ S& I, I0 c
  18. $arr1 = array(
    1 S" U) y  Q& K& S, f4 _. }
  19.      'a' => 'okhat',
    % T1 ?% x1 e* i
  20.      'b' => 'okre',$ A/ f2 O, M/ s8 d
  21.      'c' => 'okarry'8 m; l9 O1 a$ {+ M+ k
  22. );, `' @, i2 Y- d/ w# a3 A: P
  23.   */
    ; {% C2 Q' A! J5 B; K+ [: M6 W
复制代码
/ D3 l0 _, \  f9 ^2 X# G1 `
数组替换的时候,也是处理一维数组的字符串值。。

" ~4 U$ y2 @5 n! h
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
    5 ]. B0 B( [* O. V5 Q( U
  2. 7 \+ k; D6 n: I: g2 K. y, u
  3. $arr = array(
    & d1 \" @9 U7 D  b4 U( D
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    1 N. Q  ?, F2 C
  5.     'b' => 'XXX13188887777XXX',
    - h1 J( a- i. W! T/ i( ]0 f( V) Z
  6.     'c' => 'XXXX918811113333XXXXX',
    : @. Z$ w2 u, m& t
  7.     'd' => 'XXXX188111133331XXXXX',
    0 x( Q4 [3 k+ R
  8. );7 [( y' g0 u) r. x+ f- X

  9. 5 i$ p. c8 }! r( |# h3 ~1 M9 f5 T/ j
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    + b- \$ X) ~$ r+ ?

  11. + T7 [1 N6 l3 T# R  f
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
    - L$ f* V6 c1 h

  13. / K: t) t9 ?( x$ g
  14. /**
    ! l* o  O" f: s6 U4 F
  15. Array+ d( ?% d& Y( L. }4 e$ H7 K
  16. (
    - |- w5 a' N7 R) J( s* j5 @
  17. [a] => XXX25012349999XXX+ L8 t2 Q# M" i
  18. [b] => XXX mobile:13188887777 XXX+ y/ ]6 u- u5 u; E; X
  19. [c] => XXXX918811113333XXXXX3 m, ~: v+ `6 {+ b3 T+ n2 ^/ U
  20. [d] => XXXX188111133331XXXXX
    + v" Q8 m  F1 ~* j; c: p; L/ ~
  21. )0 `( r! p; C$ `3 Y8 V6 t% K1 |
  22. **/
复制代码
2 K' m# e, s' L( T* s* e6 ~% Q4 Y

  k7 f: z7 d( _* N1 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 23:59 , Processed in 0.075153 second(s), 19 queries .

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