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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
0 C6 M8 [) p7 f# z: j
strtr()的用法:
  1. <?php, u+ k  d3 U9 G, X% E
  2. 5 Z; ^" z# i2 [
  3. $str = "test";! Q- P6 j( \0 Y: @
  4. 8 {: H0 W: S, f8 F4 \/ O
  5. $str1 = strtr($str, 't', 'z'); // zesz
    / K4 T; P8 [4 W& C6 z. X
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1/ E4 h# M  q) V! Y( ]
  7. $str3 = strtr($str, 't', '');// test* f5 l  N# O: j3 ^7 j  q
  8. $str4 = strtr($str, 'ts', '12');// 1e211 q: [0 A' s- T
  9. * j) s9 w4 b  `  T2 I$ p
  10. ! o: r+ s; j: L( t  N
  11. $str5 = strtr($str, array("t" => '')); // es9 P6 B  G6 z8 [6 D" C9 f) o6 ~
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

5 X0 f+ j5 j4 D- Z" s
  有两种传递参数的格式,一种是数组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
: `) F6 _# ^5 `. s
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    0 s) |$ P5 I$ D9 I$ ]8 v) c; a

  2. 6 c- K7 G! {# ~6 F
  3. $str = "test";
    8 v, O/ n3 g- @2 C
  4. 1 ^, {" }, P: k/ `8 T& Z
  5. $str1 = str_replace('t', '', $str);// es* F# S/ H! Z; S
  6. $str2 = str_replace('es', 't', $str);// ttt( z% X8 m' C1 B& ~( z5 D" K. n

  7. ( c3 Z! g+ d# j& O6 g
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb6 a0 v; @) `9 m% j
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    ( r" S: W% f1 d# g9 i- w! b% s  t' @
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa+ s6 z7 D! ?+ Z4 j3 Z& D* y6 _
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee1 h4 I6 f& Z: m# O9 J* Q. a' O

  12. ( H$ Z; B) d: q+ L9 q2 Z
  13. $arr = array(" [: V5 n( P  O4 c
  14.      'a' => 'testa',# \. C+ n. @/ S0 h1 Z
  15.      'b' => 'testb',  I% o! a7 T. ?5 V+ [9 J: K
  16.      'c' => array(
    5 k; c! }& [5 t" I/ M
  17.          'ca' => 'tes1',3 x, K* x, Y5 v& j3 R
  18.          'cb' => 'tes2',
    2 d( M4 T( r. k% C% f* V  I5 I/ n
  19.      ),
    5 R; l6 B& Z. ^. d( C+ u  y2 @0 w
  20. );9 D3 A. f! m3 T

  21. $ B* q/ M/ c6 W" w
  22. $arr1 = str_replace('es', 't', $arr);) q0 Y* V7 R" c0 l" b
  23. /**
    + v3 r. e8 b* B+ V# V
  24. $arr1 = array(
    & t) A* c. D% |( t, |( ^+ f
  25.      'a' => 'ttta',
    8 T0 ~' a2 b4 y! [. @" u6 Z0 I% R
  26.      'b' => 'tttb',* ~8 X/ V& g: A" h+ [
  27.      'c' => array(
    7 f# N# A+ v) S6 L  d9 y+ J
  28.          'ca' => 'tes1',2 _9 m& D# ^' n' g' Z
  29.          'cb' => 'tes2',6 O1 |, S2 y7 d6 w) g. H. ^, q
  30.      ),
    , Q* J0 t2 `3 `* l! x4 j
  31. );' u( v2 w9 @* u2 h5 Y. w
  32.   *
    % ^4 s, L- u. I. G
  33.   *
    6 |* Y0 G; I! ~" h- l; u* [
  34.   */
复制代码

3 i$ \2 A* F  _& w5 |* n$ F6 E% i% }- H

) l2 }" O" X; J+ X1 e, z7 }
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
. c2 J0 H; A- B
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php9 \! [  |2 H" n/ w

  2. ) F3 Y: E% v, c
  3. $str = "test";
    1 n( \% A1 z$ F

  4. 3 K0 I9 [5 b. s9 |4 K, z
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    4 z, |: T: {7 g0 i* `

  6. # o: a& `# D  Q- ]8 \" I
  7. $arr = array(3 A. J6 a3 a4 o
  8.      'a' => 'what',8 M  D# }. _  N3 c
  9.      'b' => 'are',6 }; I! W& {5 @- ?# }( S; N
  10.      'c' => array(8 l! P& l9 n7 C* P* u
  11.          'ca' => '11',7 ?+ i  u" |) q+ z- p2 X; q
  12.          'cb' => '22',  |; m* Y) X/ P) I4 {% d1 ?- ?
  13.      ),
    # r% [: |/ p0 l7 ^
  14. );9 b, d- c/ ]( U' ^7 |
  15. # W; n5 h6 B2 e! z* U7 s6 z! j0 c
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);/ n0 c# J9 a% L
  17. /**
    / ?5 L  U; w: N0 p
  18. $arr1 = array(/ X% K# ?+ t3 T8 i( k' i: M( j% O
  19.      'a' => 'okhat',# _. \# u( U1 \2 N/ {5 `8 [
  20.      'b' => 'okre',
    & X6 C! {. {, t. o& j+ a' n0 C
  21.      'c' => 'okarry'
    & [$ J2 J, t( f9 G/ l7 L" N/ b
  22. );
    , w3 h0 s  F7 k9 S, I1 E: b, ~, {
  23.   */- u! E* H& s8 U
复制代码

6 O- x; [( t7 \
数组替换的时候,也是处理一维数组的字符串值。。

. `9 ?& {$ R# J* F! [2 _9 _1 O" |
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
    & ?( X1 U. c* A* a7 `- d
  2.   S8 k5 N) j$ |$ n* p
  3. $arr = array(0 A/ E: \8 L, C, q- X
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
      r5 |0 g1 j7 S) M' z% y
  5.     'b' => 'XXX13188887777XXX',
    ' {* V% v" W- i& }4 \2 W
  6.     'c' => 'XXXX918811113333XXXXX',
    7 e. Y2 `8 w  F+ x8 I% W8 i3 s
  7.     'd' => 'XXXX188111133331XXXXX',& v* w' y" z8 I2 X3 f
  8. );
    0 O2 Q% n. k: |: r- D' X: S

  9.   o: }2 j) \% X# U
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$32 w. |* c6 S& E% O9 S$ ?, M9 ^
  11. 1 i* H: q& g# C! s: i# s  p3 t
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
      r/ B: g) S5 k8 }% P, w
  13. ( b- @0 Q' j( j( }2 x9 x
  14. /**
    & _  f; N. ?# {9 _8 s
  15. Array: I1 v( s# C- T# {7 @
  16. (
    % ]% Z7 @' i- Q" I3 U8 K2 i0 G
  17. [a] => XXX25012349999XXX) S7 _- y9 L8 S0 I7 y2 `
  18. [b] => XXX mobile:13188887777 XXX
    ( W% ~) X- O  A5 i- }
  19. [c] => XXXX918811113333XXXXX; F3 K* c" Z& G% C0 R" D9 r0 y
  20. [d] => XXXX188111133331XXXXX2 @( d4 Y  l& `" @' o
  21. )* }( ~$ d. _+ ~/ ^1 \& ?
  22. **/
复制代码

6 ^6 g8 a/ @  a4 [9 J' I, A/ H2 ~) y4 {* W  V1 z7 w: |
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 10:10 , Processed in 0.074536 second(s), 20 queries .

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