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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
3 x) F; t4 c" a" x- i
strtr()的用法:
  1. <?php* |5 U) ]( E5 w4 l
  2. 9 U7 `9 R, `: b% u) R$ |
  3. $str = "test";
    9 O0 n0 |8 @1 |" m7 r

  4. : {  X/ P0 G8 ~& U. r0 E
  5. $str1 = strtr($str, 't', 'z'); // zesz6 s1 C0 i6 }( t0 p# p, x
  6. $str2 = strtr($str, 'tt', 'z1');// 1es15 v, g1 E( R* X) P
  7. $str3 = strtr($str, 't', '');// test( u; w+ ]' j4 Y" a+ v$ g/ O
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    ; g/ V8 v, I% f8 m# e2 u  E
  9. : p6 P- z1 Y: v7 ~8 [
  10.   ]. C+ V$ G) D: L4 n- S1 j
  11. $str5 = strtr($str, array("t" => '')); // es3 P+ Z4 n/ c$ v3 H5 r: b3 ~* ~4 o1 u. v
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
, Q3 v4 j" o' J4 @# q( a& 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

' w$ x; p" U, ?( j, u  S
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    * ~  U& M6 S1 h/ l) t& ?- e! m

  2. 9 V% `' q& m2 P* R- x8 ?' a
  3. $str = "test";
    , v: H' \4 x$ N. m, H6 W' ?
  4. & z7 K# X. I# @: v/ |
  5. $str1 = str_replace('t', '', $str);// es0 {2 l! B& x' n2 @9 d* x, ~! I2 [
  6. $str2 = str_replace('es', 't', $str);// ttt
    ) d6 D/ Q( W; m" Q+ f

  7. 3 w  ~$ L" B4 f; d; L! L
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    7 H- M6 @% Z; {$ W
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae1 L$ x$ Q1 r, g2 n* C
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
    : l! c: X- p4 b$ \1 I
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    ( Z4 u( e& q% E- ^
  12. , A# x+ ~0 Q& J# _( G( u) ~
  13. $arr = array(
    3 T2 c% G" r5 s2 P" B) ~( f) ]
  14.      'a' => 'testa',
    6 G: i: l. Q6 d. d- H/ V! u: e
  15.      'b' => 'testb',! k6 V4 T/ C" X* t& l. Z- j
  16.      'c' => array(  U. N6 i0 n% P# g) C
  17.          'ca' => 'tes1',
    7 h' h$ H, C. o9 ?
  18.          'cb' => 'tes2',0 E+ Z& C4 o6 V! m* J4 h
  19.      ),
    " W9 u9 Z  _0 ~; F  @
  20. );3 `7 s" g  E5 \+ k+ E3 ~/ G* e7 a
  21. * S* w4 j+ \8 e( E5 b
  22. $arr1 = str_replace('es', 't', $arr);5 u" i# S! k- p1 Q9 v  I
  23. /**' G) ]1 V# G3 M3 O7 M
  24. $arr1 = array(
    * c" f' y, m% T3 s: @
  25.      'a' => 'ttta',, L% G0 U& ]. S: X
  26.      'b' => 'tttb',0 c* H- u) i1 B1 A/ `
  27.      'c' => array(7 O: _7 f6 j$ w+ b$ E% P
  28.          'ca' => 'tes1',
    7 [# n& `* b/ c/ F6 ^- e% n/ @2 O
  29.          'cb' => 'tes2',
    ; W/ {! R1 b" C3 k( W- p- e
  30.      ),
    / L, t/ W# h9 V1 `- u7 W6 f
  31. );
    . v9 G4 u9 T3 y( v5 E; p
  32.   *
      N9 c. q* j% m2 ~9 Q( A  G
  33.   *
    : w: ~2 ?9 v  ]( n6 u4 [4 X3 [8 R
  34.   */
复制代码
7 t+ ~3 n! `" F$ I  l- x- y& ]# B
. @2 Z: S, K8 P. Z) h6 t, y

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

& K0 x" W+ _$ {" l
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    ; q/ r2 {4 k$ c  ]0 O

  2. 7 N4 z- P+ r+ E; Y: R
  3. $str = "test";
    : i2 L+ q0 K( L1 U6 }

  4. ! E: e% [4 P& j. V# E
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt& T2 J- ]/ I7 c1 E! ]

  6. ' i( p6 d/ b* Y% W+ v
  7. $arr = array(
    1 }, d/ ~4 K" n' U3 ~* R0 X
  8.      'a' => 'what',
    ' e/ P' I  @* _4 q! h% R+ x
  9.      'b' => 'are',; H1 }9 g! x! I& |
  10.      'c' => array(
    ' I$ L& h; \$ U$ a  b" ^
  11.          'ca' => '11',
    + m' L5 j4 @& a7 H+ C) b: V" Z
  12.          'cb' => '22',- W$ O, I& w0 n4 Q& ]# i$ X) T7 C
  13.      ),9 O* o7 w! e5 m  ]! u; ~
  14. );
    3 J  M5 ?5 ?0 @) t# f. V1 c

  15. . v4 ^( n8 l4 z
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);
    : O6 X7 }: d/ m9 a2 l
  17. /**
    4 G; U3 F; J; ?1 Z) e
  18. $arr1 = array(
    7 o6 Q, P; _! c* u" S
  19.      'a' => 'okhat',
    , e1 l/ F' K) o% H5 O1 i# [! @2 h
  20.      'b' => 'okre',, g( c3 M6 J7 R1 K* M$ ^; V
  21.      'c' => 'okarry'& n: m$ V- D9 y5 n0 c/ c
  22. );
    6 S0 f  ~4 D2 ^0 s7 e7 L/ p6 r
  23.   */
    . W! f; P& f2 l) `5 e- y
复制代码

9 g8 M9 B4 J* A/ l2 w# Y1 H
数组替换的时候,也是处理一维数组的字符串值。。
* f7 P, P) g2 `: N$ b
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
    + O9 l5 [9 @/ e0 ~
  2. ( e. @2 F( y8 u( X: L; t
  3. $arr = array(
    7 K/ X9 _3 {3 V. f2 q$ q% d4 r: I& b2 J
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    # K! W' M* P# x1 i+ r
  5.     'b' => 'XXX13188887777XXX',
    3 K+ A' q7 n1 _3 @3 l+ c
  6.     'c' => 'XXXX918811113333XXXXX',- \7 U' W$ o! ^9 t
  7.     'd' => 'XXXX188111133331XXXXX',
    & K2 |6 z. i" z" M! M% `+ e
  8. );! K) P, p1 R6 e2 R0 N) g- ^! p
  9. & U# F. K! Q, o4 E
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    6 \3 A8 z9 B; j8 z4 I- g
  11. + E! J$ n; N( `/ F  o& H
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号3 D' X# [& B+ n

  13. . b% m- B7 W# [1 i4 o- O) k! b6 I+ J4 p
  14. /**
    4 e  _! f2 E9 b0 h3 `2 ^7 O
  15. Array
    ; p3 {/ Z9 S6 `% |3 m' j# H) T
  16. (3 ~- K5 h# W- h; W2 C% u' G' M
  17. [a] => XXX25012349999XXX2 ^: @( E! F" j! u0 Y3 c2 ^
  18. [b] => XXX mobile:13188887777 XXX
      L+ o/ g9 G' ?5 w! w
  19. [c] => XXXX918811113333XXXXX
    7 Z5 ^& @' w% _2 K% S) @/ S
  20. [d] => XXXX188111133331XXXXX
    % p8 F0 U% G  @- j3 `6 o" }& Z1 K
  21. )
    1 ]" i6 [- N! {* a
  22. **/
复制代码
. ?, e, ?5 v! O- ^5 u0 m" j, E
) h1 q" U  b2 `& \# u6 I
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 14:46 , Processed in 0.057279 second(s), 19 queries .

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