cncml手绘网

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

作者: admin    时间: 2019-1-22 10:01
标题: php字符串替换的几个函数
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
( F8 }8 i% T% k, _! R* s
strtr()的用法:
  1. <?php
      e  {3 y% S& e2 l
  2. 8 G* @0 Q9 p% ]- s. Q
  3. $str = "test";; I: _' k6 O* C# a. V

  4.   M3 e3 X; d3 f  p8 D2 H5 o
  5. $str1 = strtr($str, 't', 'z'); // zesz4 q5 n6 q8 M5 |1 B9 N# o7 J
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    * _5 R* D* r) H/ @' P, E( }! j
  7. $str3 = strtr($str, 't', '');// test& N3 G: _& H- @) T; g& l
  8. $str4 = strtr($str, 'ts', '12');// 1e21& @- E2 t7 g+ l, E7 }% d
  9. 1 F4 ?) C9 N: i5 h/ {) |
  10. 2 B( r7 ]5 N+ o- A& ?1 b/ e8 t# A, I
  11. $str5 = strtr($str, array("t" => '')); // es
    1 P& [: k0 O* K7 ?$ y, L
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

" H  @% S6 L6 P. A
  有两种传递参数的格式,一种是数组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
8 ]/ c4 a/ s( m) _" d
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php* c4 b# p+ r$ R
  2. ' K, \+ j; {' \1 [5 V9 K2 @
  3. $str = "test";1 U! Q, Z1 @! v) _! I9 y' [1 I6 h' Y

  4. 8 q) ~% {8 {# w( L/ _# j
  5. $str1 = str_replace('t', '', $str);// es
    : e0 E, B/ _7 f0 x; v
  6. $str2 = str_replace('es', 't', $str);// ttt
    3 u1 W; F% }* u

  7. 3 w& L8 Q; H! V) M' f1 \
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb$ C% I  `1 n' }7 L' h# x
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae( ^: H* a* X" o1 ]4 Z3 k0 Z9 B
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
    . r  u: \' z- \' @
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee% b( A- m. m: C! J8 h, F

  12. 7 B4 G, n; f9 {: I' `# h
  13. $arr = array(
    / }9 u' F/ s% l! _+ A! d0 n  {
  14.      'a' => 'testa',' }9 X( P7 u$ M% x+ t0 ~
  15.      'b' => 'testb',! E/ f3 h, }8 ~8 `: Z. S! n3 d
  16.      'c' => array(0 M4 y) ^* B* y' R
  17.          'ca' => 'tes1',0 m8 r, I8 W. U; F/ C
  18.          'cb' => 'tes2',
    % [/ O, X. s, \& V  C) C* B) m7 ]
  19.      ),
    & l# ~; V$ O7 H1 H3 o9 h
  20. );# n! E- t& m9 m( l

  21. 9 t, B6 Q2 C0 H8 `. _5 |7 b" v# O
  22. $arr1 = str_replace('es', 't', $arr);: q, i0 Z5 M* u6 ^1 F/ [0 a
  23. /**, J3 A) a. I5 S' Q+ D
  24. $arr1 = array(
    4 }1 J9 o# F. c- S4 d
  25.      'a' => 'ttta',
    - \& O6 C8 _- @: e7 @' k4 t& \
  26.      'b' => 'tttb',7 k& q$ c7 w: m$ O5 C1 t/ n) u
  27.      'c' => array(
    / N) F# t5 u% L; k( K( b& p! u; z
  28.          'ca' => 'tes1',8 @  A! T" f: T! |. F
  29.          'cb' => 'tes2',
    7 X, \3 S$ T& M) l
  30.      ),
    4 I% _: v( U/ I6 K
  31. );6 J8 O- Q: q- k/ @  ~) @1 m) N
  32.   *
    : w6 q8 T, P& R+ o( |$ \/ V
  33.   *
    4 J7 j* Q" {' c: a4 d6 i" O0 d$ b
  34.   */
复制代码
7 H8 ?- s) p* D+ U$ P8 G% n
( o: q, z( B+ v* Z

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

4 s  k" U9 o$ Q. {) `
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php5 k) v# ~3 ~* [( d8 K
  2.   v( i8 m2 ~! [0 Q2 \- ^% @; I
  3. $str = "test";
    & ]) `7 j& ?7 |& n% p; L) H
  4. 2 A. w0 y; ]( v) L
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt$ j5 T( ?# ?, L3 }8 G
  6. ) D* x9 k7 }7 P; U! B, v4 R
  7. $arr = array(# C# @  H: ]( ?0 ]" `
  8.      'a' => 'what',4 E, d* v: B% U( f' a
  9.      'b' => 'are',
    2 B' ^8 c- r) O) r
  10.      'c' => array(
    , l) `: ~1 Y% }
  11.          'ca' => '11',
    ) z! e$ L0 n2 r6 r$ Q& ^
  12.          'cb' => '22',
    1 k: D6 q( N1 j/ c2 \5 g& @8 H* E# i0 h
  13.      ),, Z- K! u* Q# w% V9 s5 I: `
  14. );
    5 E' }0 J, W* h+ q% S
  15. * K" u( F6 q& q: {. ]
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);
    5 |0 @$ z& O  w% g( \$ g0 t9 u) {
  17. /**8 L: p0 r! l2 G5 w
  18. $arr1 = array(
    $ ?; {& G1 E4 [% T
  19.      'a' => 'okhat',! T# J* P3 o9 |( Y/ X3 u9 O
  20.      'b' => 'okre',
    ! Z) C# [9 A' ^( ?/ r
  21.      'c' => 'okarry': R  `0 e8 R% d% V  d
  22. );
      U2 ^: V0 ~  R
  23.   */
    ' b3 T7 K2 E! P9 Y" L) T! M
复制代码

5 M/ k6 R# T; ^! M
数组替换的时候,也是处理一维数组的字符串值。。
1 Q( T' |& h- b- I
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
    , j2 s6 N! y( x* M" i7 z* E
  2. + q$ g! {' z& w2 I9 L
  3. $arr = array(3 J& O- |/ [3 G; [+ \
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头) H3 T/ E% Y- \1 T& L6 f
  5.     'b' => 'XXX13188887777XXX',
    7 D+ z; ]8 `! g8 Z. j; m
  6.     'c' => 'XXXX918811113333XXXXX',; t* X4 L, L& _) [# n+ l9 K1 ]
  7.     'd' => 'XXXX188111133331XXXXX',
    0 c$ M8 E+ @8 |4 G: H; Y
  8. );
    4 t  B) \, ]9 L' G

  9. 7 Z) c1 \$ h6 Y& H+ I
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3* ?0 X& c8 F+ n6 \" G
  11. " s. z9 B3 E) }  m2 \- R
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号7 e9 o: _+ p) s! q0 K

  13. . @5 i* k4 u( ?& M. y% A
  14. /**: a; S: j4 b4 s
  15. Array) _6 j  T/ C; k0 _
  16. (8 I7 D% ?2 [+ H# P
  17. [a] => XXX25012349999XXX. e% F4 f* d( ^' T4 ^+ \! ~
  18. [b] => XXX mobile:13188887777 XXX' I& A+ {. t0 c4 m
  19. [c] => XXXX918811113333XXXXX
    3 x. }4 K1 N. w" v$ H( D; [
  20. [d] => XXXX188111133331XXXXX
    + j. s# [( u) I. d! ]/ E9 x0 A4 a
  21. ); ]( [( ]4 _, z5 f4 D* r# v4 G
  22. **/
复制代码

5 b! U. h8 u. z6 E% F7 ]0 |+ q
  d2 S1 f' C4 ^6 _% t: Y




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