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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()

( P  K6 V5 b2 q$ w+ a6 [9 j
strtr()的用法:
  1. <?php
    8 V1 p5 Z  X3 y' d' C3 ]

  2. 6 [# i$ f  U5 F$ B( Z6 S7 K  @
  3. $str = "test";6 [7 ?" z" U- b; b# M6 f3 r
  4. ( l) }* n8 C/ B. m
  5. $str1 = strtr($str, 't', 'z'); // zesz
    6 v6 ^: w# v( a  L+ e3 d( w
  6. $str2 = strtr($str, 'tt', 'z1');// 1es15 r' v5 ]1 R/ ?+ A0 @
  7. $str3 = strtr($str, 't', '');// test
    4 D( O+ I# h5 ^' ?$ a) U
  8. $str4 = strtr($str, 'ts', '12');// 1e21/ m" b1 u# f* {  Z

  9. - ?3 \8 ~# L% W

  10. 2 a; z$ A+ x7 ^+ B
  11. $str5 = strtr($str, array("t" => '')); // es- Z' X% J0 B% X% S( [
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

6 U+ _# A# B9 |2 d
  有两种传递参数的格式,一种是数组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

& T. V% f& i. @+ x4 I- a3 s
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php1 `" x  C$ o1 k. |
  2. " n  N  h$ j" m6 H  h3 Z/ n2 j
  3. $str = "test";% w3 Q% K# {1 K; T! B, ^

  4. + I$ I: h% D% T
  5. $str1 = str_replace('t', '', $str);// es: C9 ]! T) I* m4 y
  6. $str2 = str_replace('es', 't', $str);// ttt
    $ |( V$ Q! w' ?( H' ]& c- s% ~; ^3 m
  7. ' K. }+ }3 [+ I7 H$ N9 ?
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb2 W+ ?# u% `4 @* ?0 ^
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae; H9 e. U0 S, K1 a! E
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa% g( h* x: C; q" s9 d8 j+ l
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee( o3 K. [' V9 N2 ]* A
  12. 6 \1 W  X( c& j' {& Q* X
  13. $arr = array($ }6 Z: i& g0 P2 L
  14.      'a' => 'testa',
    ; o) X  ^: i0 `
  15.      'b' => 'testb',; v! ?/ |9 U0 p/ a
  16.      'c' => array(6 \/ @/ r: J7 ^" z! o  h
  17.          'ca' => 'tes1',3 d& ]% B, v6 \: n9 c. U: T
  18.          'cb' => 'tes2',+ N0 ~9 ?0 ^' G& f; V
  19.      ),4 [7 ^$ r4 V6 \' z, n8 H
  20. );" ~3 D5 G; b2 Q5 B1 ]
  21. ( ^5 r$ I% R4 }
  22. $arr1 = str_replace('es', 't', $arr);
    9 \$ p0 s  V5 q
  23. /**: j, {4 e8 e+ x& j
  24. $arr1 = array(% {( I8 f, p1 n1 M4 A' b
  25.      'a' => 'ttta',6 Y! q  k5 B# q7 @; X
  26.      'b' => 'tttb',
    3 ~; W! k/ b: }2 [" Y, }
  27.      'c' => array(  I% `( |' \0 B- `$ M! n; g5 A4 w! a5 _
  28.          'ca' => 'tes1',% P- n  ]1 K; f) j8 ~) r9 U
  29.          'cb' => 'tes2',
    9 z1 |( o! N5 j: q1 P% k
  30.      ),, m9 Y' z: d4 ~9 a7 ^4 T' M
  31. );9 u+ C" P" ?- [4 R% U. s
  32.   *4 F' j" I& {" e# q$ x7 `9 z0 P
  33.   *
    # f. L. R9 z3 m4 t/ _8 V
  34.   */
复制代码

2 y) q: H2 w& d) t) F8 x2 b% ]) A& n0 i
( s0 [7 S' j; ?1 w" D5 g
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
7 q( V+ B; k: J$ j
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php( O3 I* {3 k1 o( ~+ w; y% h3 y- y8 w

  2. & m2 t. R, f9 g" `
  3. $str = "test";3 ~" @' W6 b+ l9 T: g4 i

  4. " H+ I5 r* K. S! {& a! l6 E9 I3 m/ g
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt5 ?) [$ X: @7 R( `

  6. $ |- a& b% ^& l0 T7 o3 Q+ F
  7. $arr = array(
    ! x) {4 O$ F6 K$ I# p
  8.      'a' => 'what',0 r% K3 l. ^9 X! ~. z9 z9 K6 Z& z
  9.      'b' => 'are',
    " L* y7 k- c: h+ A4 V
  10.      'c' => array(8 a; w, D  }  b1 W% u. p
  11.          'ca' => '11',: z4 i0 C: d& z  p; v- F
  12.          'cb' => '22',' v; X, B% X4 a$ y: d
  13.      ),
    , K4 `3 p; d/ k/ A8 I
  14. );
    5 _4 G1 h' N+ z* u' K& K

  15. : R7 S6 \4 m8 S: X6 D- O1 ?3 q
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);
    9 z8 w7 C" @6 {
  17. /**  {, D5 z2 `0 p) B' k5 P% C' D6 \$ j
  18. $arr1 = array(5 q5 O3 ?6 v9 Z1 e
  19.      'a' => 'okhat',
    9 s7 k- W9 u8 I$ B0 s% E
  20.      'b' => 'okre',
    ' D- k. X* V9 G
  21.      'c' => 'okarry'' `7 H4 C4 }8 |5 b1 P2 C" X' y
  22. );. O) V" a# ~3 p- |, f# x. Z
  23.   */: W9 V% O# ]2 L  w, i0 Y: f& l
复制代码

' f* k: h  g; A& R' ~
数组替换的时候,也是处理一维数组的字符串值。。

. Z: c" o2 R" K% n* z0 \
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php5 v) z3 w% O1 d9 M7 k  B$ ~9 x
  2. 2 q) j$ T' S* ~8 Z1 _
  3. $arr = array(" M5 p; P2 W' s% ^- U8 J5 E) r! z
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头* t! d/ o4 H+ P/ m% w$ R' h
  5.     'b' => 'XXX13188887777XXX',
    5 T' E7 a& s9 @
  6.     'c' => 'XXXX918811113333XXXXX',
    & r, O$ t8 M2 o$ G! ]* U+ E
  7.     'd' => 'XXXX188111133331XXXXX',1 z, L, ]# Q2 L: n7 `- \& k
  8. );$ P6 q- U. a4 B
  9. $ G% c8 Q4 K- h) f! h$ F
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    ; v; V1 I4 G# V# b+ T6 I% [, E
  11. ! x1 @" l" {8 j- J' k7 _
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号6 I8 _8 s9 Z% q* l0 k

  13. 0 r/ e2 b, x% K2 w/ ~9 Y# ?
  14. /**
    : M0 ~+ J% X& B8 n4 V& h+ H$ O) h5 D
  15. Array
    8 [$ Y# Z* W. k
  16. (  o8 j% r+ X3 A& f! U- D4 I8 K- c
  17. [a] => XXX25012349999XXX: Q8 q* c- s- D! ^) H
  18. [b] => XXX mobile:13188887777 XXX* p3 V* i2 Q" Z( ^
  19. [c] => XXXX918811113333XXXXX
    ; L# w% D; t& f2 E# l) v
  20. [d] => XXXX188111133331XXXXX: d  O$ y' n/ |/ W  C2 C4 [7 N
  21. )
    1 W( X7 S1 r# d" C
  22. **/
复制代码
+ D6 K+ E* I  r8 y) K% D3 B

3 _! d  z6 u* u% u0 M% \( H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-4-20 13:14 , Processed in 0.116252 second(s), 19 queries .

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