cncml手绘网

标题: php字符串替换的几个函数 [打印本页]

作者: admin    时间: 2019-1-22 10:01
标题: php字符串替换的几个函数
  strtr()
  str_replace()
  substr_replace()
  preg_replace()

" t; V* _& g( e; k" ]  J; |8 B
strtr()的用法:
  1. <?php9 g* U$ w/ \6 x, q( G7 h

  2. : S0 i7 I: l  j3 ]- ]
  3. $str = "test";1 t7 ?3 h% X. ]' D
  4. 2 N: h' }$ I" i& d
  5. $str1 = strtr($str, 't', 'z'); // zesz
    7 g2 s5 y. Z( G. j* D! t8 D- E; x
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    6 Y' Z4 U3 z* E& y2 ~- v
  7. $str3 = strtr($str, 't', '');// test6 L$ d5 v7 Z5 H* w
  8. $str4 = strtr($str, 'ts', '12');// 1e21* Y2 ~, H' X+ _5 ^8 y

  9. , O4 |% V# i: h: Z2 L( a9 A

  10. $ d! W& ~% M9 z) x3 V1 h) D
  11. $str5 = strtr($str, array("t" => '')); // es
      }( i8 o- L) Y
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

/ D/ ~" N  T, i& p8 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

; i9 J% Q7 n& |2 ?6 P
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    + |9 N0 b4 Z/ A1 b  @
  2. ' w2 j4 K/ |% r/ M# @) b' A- u, P' L
  3. $str = "test";
    + Q( j( d) L. D5 e3 y/ s' p

  4. 5 \3 x; J: x7 j6 C
  5. $str1 = str_replace('t', '', $str);// es! g' l$ l6 @, f+ }
  6. $str2 = str_replace('es', 't', $str);// ttt/ S+ a9 ^, o5 s% g7 ?
  7. 7 U: U, i! J9 _$ c$ a# y
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb" C7 G: w8 n) u/ f
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae1 z& Z( M7 g6 r- ~6 P* ^
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
    4 O5 e3 |2 {$ E* }
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    # E" h3 ^6 r5 A: P! l

  12. 8 j5 _0 T, |" _, C( Y" Y
  13. $arr = array(
    # M! Z1 P% n/ @6 o0 s& r* X! g
  14.      'a' => 'testa',
    2 {) P# {; r- w1 v8 X3 X# N8 h1 ~
  15.      'b' => 'testb',: I$ E8 X: i$ W/ q1 T1 s5 U6 x
  16.      'c' => array(8 I+ r; m5 W$ ^- c6 P
  17.          'ca' => 'tes1',1 b6 k: r3 N- N+ @
  18.          'cb' => 'tes2',& d! U" K  B; n' _$ n2 F; j6 N
  19.      ),  D% F) G  Y; {* ~7 p
  20. );9 X4 ~5 w3 K8 n. H3 C8 ]
  21.   w! i- M- g/ r* i5 z' Z
  22. $arr1 = str_replace('es', 't', $arr);
    # Y' j. z+ _! `: F6 Y' O* I+ q, _
  23. /*** _; C2 O+ z) @
  24. $arr1 = array(
    " `- Z- o2 {; U9 s  J
  25.      'a' => 'ttta',
    6 i1 x5 T8 [) [0 y& c& W
  26.      'b' => 'tttb',
    % r/ o  {0 ^' j! G4 V+ W6 B
  27.      'c' => array() D- T! _$ p0 H) X5 R7 |8 ~
  28.          'ca' => 'tes1',
      M/ @5 i* G/ L6 i/ j3 j" T
  29.          'cb' => 'tes2',1 s4 M7 d: ]: Y5 Q$ w* r2 J9 `
  30.      ),8 {0 w3 l! c: J) V' F
  31. );- g8 U0 d5 O7 w1 D3 t* U# [
  32.   *0 _4 j) E2 x2 H! H3 E
  33.   *# x" ?5 m3 j9 y' {! w" ?; l+ ?" _6 G
  34.   */
复制代码
% k7 b6 H1 @  L+ T3 [& q" U9 J

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

! A$ S" \; T6 G- R. ~
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    ! x6 Z) {3 Y/ ?' l. B
  2. 7 G  G! M, V  E+ m, R
  3. $str = "test";  \, \' D5 {; v

  4. # H+ h5 \' H  W
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt( d8 s: q2 Y/ q) [. }
  6. 4 c% M' y1 b% \, s
  7. $arr = array(
    3 W) g, C9 n# I- }! @, }; u
  8.      'a' => 'what',% F) T! X6 z; N" F7 y4 _2 U( [) z
  9.      'b' => 'are',
    # ^& K, H8 V- f- g4 m. W
  10.      'c' => array(
      t' ~/ X  e. c0 c, b' U* W
  11.          'ca' => '11',
    , I% U$ ^" ]0 b! j% x9 [/ l4 D
  12.          'cb' => '22',
    & i% l( Y3 G# u+ _
  13.      ),
    ) f3 w* V* {) U6 }0 x
  14. );
    0 [- {$ P* t. h; {4 O
  15. 2 N- a# V3 }. ~2 Y
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);" F3 s- t2 Q  E: V5 W: g8 Q
  17. /**
    2 L+ J1 b$ Z4 n( j
  18. $arr1 = array(
    + U. C/ q- t# `! ~
  19.      'a' => 'okhat',. s& b# I- E" r9 B( a' L. d
  20.      'b' => 'okre',3 Y1 v1 O0 X& G% p, q* o8 j
  21.      'c' => 'okarry': ]: e- f7 R( _- g: B( o1 w- O0 O) U7 D
  22. );! S: f! Z0 k% m5 _5 q* V  o
  23.   */3 V' j, T+ k( ^
复制代码
4 u) i$ b7 `, n& V3 B/ A
数组替换的时候,也是处理一维数组的字符串值。。
: [; b. Z( i' j2 \: Q6 A- g( I
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php& e0 n+ M1 R* @3 G

  2. * e; j& |1 p% c+ B3 t) j  x
  3. $arr = array(
    " G# f  h4 g( r
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头  I/ S9 n7 t7 U9 C. y8 v( X
  5.     'b' => 'XXX13188887777XXX',' A  c. F  z/ b0 `
  6.     'c' => 'XXXX918811113333XXXXX',
    ' P7 B9 H+ X  N  {
  7.     'd' => 'XXXX188111133331XXXXX',
    + ^3 X1 Z- r5 F% ?; B# @
  8. );
    # r. U) A" G' M' A

  9. + V' {3 p$ I+ M
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$31 Q2 ]( N4 i/ c5 ~7 o

  11. 9 Y' `$ U$ D2 R4 u+ q0 g5 E( x: b
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号& ?4 p" i/ I# v0 O

  13. , T) O( W* }! J3 A0 |
  14. /**
    6 y) O7 j8 r! S5 y
  15. Array
    + O6 r' W5 h8 V7 L0 K
  16. (
    # `( f' p3 `0 \8 W+ v/ U3 h
  17. [a] => XXX25012349999XXX
    & {& F% O; Y! K$ _
  18. [b] => XXX mobile:13188887777 XXX/ m# |5 y% A" C+ g& X
  19. [c] => XXXX918811113333XXXXX" `1 `& O  Q$ E
  20. [d] => XXXX188111133331XXXXX
    $ k; U( ^  Y! |2 H- |5 O
  21. )! S/ @' z) Z5 Q& \' s( L
  22. **/
复制代码

2 A: `: j9 p3 _5 `* L
* g5 u& U" }# S0 [  R




欢迎光临 cncml手绘网 (http://bbs.cncml.com/) Powered by Discuz! X3.2