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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
+ N) u( q& W+ r0 S2 w9 C0 S
strtr()的用法:
  1. <?php
    ( U4 v9 v6 a9 K2 \! G+ G, t

  2. 2 f9 f* ^9 P. x$ U" P0 E7 W& N, b
  3. $str = "test";
    1 o4 K! H: R9 K+ R, R

  4.   ~9 v) }: O2 ?1 B* z5 j) q7 D6 ]
  5. $str1 = strtr($str, 't', 'z'); // zesz
      e! d* F$ f1 D# h  C
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1! I, R' m$ y# _3 t
  7. $str3 = strtr($str, 't', '');// test
    - P* Y/ {! w* K6 h/ {. _
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    / i" r! K) P6 m8 L
  9. , i: e! }/ @) k1 S9 I% a0 c" l
  10. ; ^# X+ M4 n$ E0 V% x
  11. $str5 = strtr($str, array("t" => '')); // es
    : ^% r  B: T# e& D, j3 f% v
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

' X* B/ o4 ~0 q) F/ y* W3 Z
  有两种传递参数的格式,一种是数组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

1 t9 H! a7 Q) l7 M
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    + [9 v! ?5 T8 m$ ~( F1 ]
  2. - P7 b$ X: ?6 C: p, a
  3. $str = "test";# W% L. R$ k" F- a9 `+ I
  4. * ]4 n. G, k$ Q4 Q: Q
  5. $str1 = str_replace('t', '', $str);// es& Y- _+ g5 ?. _. Y
  6. $str2 = str_replace('es', 't', $str);// ttt
    3 c/ o4 s/ Q& o$ J

  7. , h1 \6 A1 y+ [+ k( y& r) h
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    # S6 U2 ?$ _: h5 l( w# s
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    ( {0 a8 k0 ^+ k% ?( G
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
    3 B. G# H* [1 U8 y& \
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    3 v" R8 W6 v5 ^( h$ W" P
  12. . o* j& s  r7 k+ f7 u
  13. $arr = array(, J6 T6 b; N( j3 h
  14.      'a' => 'testa',
    $ E2 h9 l1 r6 {6 i' `
  15.      'b' => 'testb',+ L8 E: n* V, C9 d+ U
  16.      'c' => array(4 [' R) E/ [% p7 l5 |% h/ a8 }3 c
  17.          'ca' => 'tes1',8 I2 {9 `& g. D
  18.          'cb' => 'tes2',5 h) e- i* d- @9 v$ O" H. y
  19.      ),$ M. X* B5 d, O5 i( J& N9 y) [! @
  20. );5 A- u8 ~/ N7 W( t2 L/ c

  21. + t9 F' q# m' F8 R# H' d# {. P
  22. $arr1 = str_replace('es', 't', $arr);
    ( o* J1 A( n0 @- S
  23. /**8 v9 k% B( k4 H$ f2 p1 m
  24. $arr1 = array(* u9 S- i; j; h. ^4 j2 O
  25.      'a' => 'ttta',8 L% k! |/ ]6 n
  26.      'b' => 'tttb',6 p. C5 W2 G) X
  27.      'c' => array(5 A/ A! w8 f! o6 z
  28.          'ca' => 'tes1',
    , K' @/ i* g% x
  29.          'cb' => 'tes2',) k3 C, g3 @5 k6 g  c- [
  30.      ),' Q0 F) O# Z2 U) F9 t( R* O  {  h
  31. );: L2 `. u0 K+ e9 s/ R0 P- W
  32.   *
    * h( G) E0 M1 ?( D( R0 {3 w
  33.   *  t6 U( g) p& n1 q. l  Z& ^0 n
  34.   */
复制代码

, G$ ^1 W- n6 ~& |& u6 X' E+ N0 p, {1 O% b2 l  E( f4 P
% M% A" f  b% S9 i5 k  U2 q3 c1 ?
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。

  G& {. b, F9 b) F
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php/ u7 J8 ]6 c$ Y* Q; S5 i2 I0 m+ W

  2. + V% V' B4 @1 J4 Q
  3. $str = "test";
    + s1 i+ p0 }! G
  4. . T( P# s- ?, k/ g
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    2 }# i* W! O& I2 w

  6. 9 k& Y$ s+ u% R: {1 V: _
  7. $arr = array(- H& j, m2 M% k' A2 y4 z
  8.      'a' => 'what',# a% a( ^" Q& }' C8 Q9 ?! \2 U
  9.      'b' => 'are',4 h1 Q& i8 o7 l( }) K, y! x
  10.      'c' => array() T: S  V$ Q( z0 s, }* n% E
  11.          'ca' => '11',
    + P2 v. ?0 D6 b# a4 {
  12.          'cb' => '22',
    : F+ i& |; ?/ `
  13.      ),2 a0 T1 b& B0 t7 U  H2 R+ e
  14. );$ `+ j+ T# ^. ^& ^; L8 ^

  15. ( v3 b  P" P# n, [" U
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);
      G0 \( m5 E3 a! S! d
  17. /**
    & e# B1 d+ e0 B# V5 P; W  ?7 {
  18. $arr1 = array(
    7 L) n  l+ Z) T9 F% \* j: n+ `& I
  19.      'a' => 'okhat',: |/ y6 L& R; `3 r. X, _6 D# u3 l
  20.      'b' => 'okre',
    0 r. ~$ z0 B5 w/ d
  21.      'c' => 'okarry'
    " Y0 C4 L% u. x
  22. );
    % g  J5 r6 ~" `" }. t! j
  23.   */' k5 z& b' j# e. V
复制代码
6 [4 [: E! Z0 X1 V9 t, N% A3 U" Q
数组替换的时候,也是处理一维数组的字符串值。。
7 r  Y! F! W4 Z
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
    ; I8 d. h$ Q" K: D" j# ~! K

  2. / D0 g: m4 a4 Q9 v1 Z* D3 f" Y  ~
  3. $arr = array(& I6 v9 X: f  U
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    % r9 `! q# f* b9 I1 c7 ]
  5.     'b' => 'XXX13188887777XXX',
    6 f' v2 g: u+ u; c# k
  6.     'c' => 'XXXX918811113333XXXXX',
    & l5 q' q' {( [
  7.     'd' => 'XXXX188111133331XXXXX',% w. }/ @" W; `/ ?% d
  8. );
    1 q4 \( E$ [' i9 z; f; q4 T: ^2 I" \

  9. 3 w' {- Z/ n  {. l! F
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    9 H& Y) t+ N6 d* q: E/ T
  11. - T" m3 _4 T) ]; A' }, ]
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
    1 F: F+ v$ B+ d  B6 c/ b
  13. % {% [/ \" `! w$ Q! O  w2 j
  14. /**. @! I6 n* k0 [( x( r! k9 I
  15. Array
    . D- X+ ~  {$ b* v
  16. (
    2 o- N: ?# x% O$ o7 A" [
  17. [a] => XXX25012349999XXX1 `( D0 d/ E( Q  C0 ^4 \; }" S
  18. [b] => XXX mobile:13188887777 XXX
    ( l1 `. j: _$ E2 U# \; p+ o& E/ V
  19. [c] => XXXX918811113333XXXXX9 L- ^% c( S6 n8 S% a
  20. [d] => XXXX188111133331XXXXX' z" R/ p7 @+ I  ^* p6 o
  21. )$ u1 S5 f, u% L+ g
  22. **/
复制代码
+ n, d, z# ^5 q
4 B# B2 L4 F( {; l* t3 G+ }9 p
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-21 02:07 , Processed in 0.050867 second(s), 19 queries .

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