cncml手绘网

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

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

# e. w" O! L7 e" c: Y
strtr()的用法:
  1. <?php! X% E; z: k; `/ U, C  J
  2. 7 r( W; J) y, ~3 O) ^* s; R
  3. $str = "test";( B! Y* ]8 Y* V

  4. ! b1 L/ B3 ?( z% x; J4 s- C
  5. $str1 = strtr($str, 't', 'z'); // zesz' I. W8 p( H1 B) F8 }
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    9 N: F  U' U' e, Y6 R+ W$ v$ `- r
  7. $str3 = strtr($str, 't', '');// test* f( v3 P  O" i2 k2 z* H' y. a, z  P9 ~
  8. $str4 = strtr($str, 'ts', '12');// 1e21% L) Z* r+ V" a% T" Y
  9. / _$ l$ ]7 @" l$ ]* W# ^/ A' I

  10.   d# i- ]0 T4 V2 b) k
  11. $str5 = strtr($str, array("t" => '')); // es8 `5 Z; P0 ~) e  U
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

) j* s* r( N) @# B" T* q: 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
- U2 D( j4 a- @" S/ w& \2 B* Z0 e
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php0 P, J  p0 r/ n% J
  2. % x  \$ W4 Z$ O
  3. $str = "test";& I; O# \4 L. A9 g/ T

  4. , E: W8 I/ `/ n3 E. G
  5. $str1 = str_replace('t', '', $str);// es
    . D+ \- ]( \, J* ~6 k0 O: z
  6. $str2 = str_replace('es', 't', $str);// ttt7 o1 B+ J  `+ x" N- J+ d2 R4 u

  7. * Q: Y: I  a7 x
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    : q1 W8 `  _: n# A- h  H9 D3 B
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    " F: f8 z% a/ W8 j, q$ T
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa4 `2 i) }" f$ k- {' T! r8 p  T
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    0 N" d7 p! {$ q( ]+ N0 N: L

  12. ) g, u; y/ z6 a4 ^3 G! s
  13. $arr = array(
    0 m+ O5 ]1 g- w* B
  14.      'a' => 'testa',
    * p3 N2 P) Q8 B, Q' d8 y
  15.      'b' => 'testb',! ]2 l9 d! M2 [0 v5 k" S" k
  16.      'c' => array(
    ) r6 d# t1 n' J' r4 W4 e
  17.          'ca' => 'tes1',
    6 H7 M8 d8 l4 X; T
  18.          'cb' => 'tes2',
    8 H% K) l7 G2 [) i2 W# ?) V
  19.      ),3 Y3 Z0 C# Y* M: H% Y* Q
  20. );! o; p2 c. W6 N
  21. 2 k# `5 d$ y. h) R6 z
  22. $arr1 = str_replace('es', 't', $arr);" y) N9 F5 q2 g3 g+ `0 S
  23. /**  u6 B6 ?% K7 F* w
  24. $arr1 = array(' Q, v7 h. Y$ t* ~" J
  25.      'a' => 'ttta',; e. H5 `  ^; R. Z
  26.      'b' => 'tttb',
    0 P: g$ F# {/ c" E  R
  27.      'c' => array(
    ' x" D$ v5 y5 A8 ~) w
  28.          'ca' => 'tes1',; c9 x8 ~' @# L# d
  29.          'cb' => 'tes2',. n) P; H& q7 ~3 Z
  30.      ),5 C2 E8 ^% y+ O/ k+ r2 g0 a" x" g
  31. );
    1 ?4 t9 E- G8 u7 y& V3 Z9 m# E
  32.   *
    + o! p3 j$ c. T- j
  33.   *# ~: e- V# e, ^  T
  34.   */
复制代码

! y7 z" `% W6 f6 X! b! t
5 c; ?$ Y; w5 b8 \# [9 R" o0 `  t& u, a, j3 T# Y' b
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。

4 l5 M) d8 m7 D7 A2 x3 a5 S
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    + }6 G. k* [; q: Q+ P0 x1 ?5 v

  2. ( Y. _) W/ g6 ]
  3. $str = "test";: O) f! Y. g7 X- S" A7 G

  4. , M" q2 _+ r8 }: X4 k0 p
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
      K3 V7 p1 X! h1 q5 @/ R$ S

  6. ; l: J) u! c' j7 \1 x7 b& _3 h
  7. $arr = array(
    ; P* k: |1 W$ @  t6 s0 H1 @; W
  8.      'a' => 'what',' s# D3 t1 H$ Z  L( p* |
  9.      'b' => 'are',+ B8 D4 t7 V/ Y
  10.      'c' => array(
    ( y& e+ j: S7 U  n% m/ v
  11.          'ca' => '11',
    2 P$ a) p1 J: T/ q
  12.          'cb' => '22',
    4 ]7 M( [/ y  k% a5 u
  13.      ),  V: |4 J9 ~$ |( R4 J
  14. );" ~+ o, U2 d, K0 e2 u! W3 v" q) s
  15. + L& F2 \0 h! }' M  v9 ]* I
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);5 F0 O$ c1 L$ R
  17. /**& C7 \- s2 g: ~
  18. $arr1 = array(
    , E  u" Y; N# K2 C3 u
  19.      'a' => 'okhat',
    + v. r$ h. d  L+ z# {( D
  20.      'b' => 'okre',  e7 X: L$ a* g
  21.      'c' => 'okarry'
    6 }, e6 i# @) x7 A' w3 ~) Z/ m
  22. );
    $ e2 K& |$ a' \: m  t  a
  23.   */' I* w. p. h! u& u( u4 E( D! V
复制代码

7 F) x/ x, R) h, P' A& S0 i: u
数组替换的时候,也是处理一维数组的字符串值。。
/ s1 U% v  L1 k
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
    * J, o! d8 U$ D0 @

  2. ! D2 i2 M+ F: W6 _
  3. $arr = array(
    ; S4 a; ~' {+ B& E% A: E
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    ; ^6 C! U8 Q0 S# L$ i  u  u* f
  5.     'b' => 'XXX13188887777XXX',
    ! H( U2 @3 S/ c5 _' d
  6.     'c' => 'XXXX918811113333XXXXX',
    / t$ `- {6 J+ ~
  7.     'd' => 'XXXX188111133331XXXXX',: _2 Y- N- |' y4 P0 K
  8. );- @4 R/ \- ^7 ]  |% p

  9. $ N, N7 G# G! U4 p5 a9 O4 r2 V; g
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$33 J. [3 ^5 g- t+ C

  11. 4 h, S: L% I7 N1 s9 P
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号% b! d+ x! R  u3 s5 k) x

  13. : p( U6 T3 z# O3 G
  14. /**
    2 A$ `' e% r4 z( n: ^% Y
  15. Array8 R1 [# ^/ Q5 Y3 P
  16. (
    0 t4 r1 v. ]; }( ?0 O4 t1 s* o
  17. [a] => XXX25012349999XXX
    ' f* s5 W  M& s$ R! \
  18. [b] => XXX mobile:13188887777 XXX
    ; }0 F9 x, h+ e* C
  19. [c] => XXXX918811113333XXXXX+ a2 @% _# E6 [1 f5 {& V8 G
  20. [d] => XXXX188111133331XXXXX/ T& g0 ?# `$ n: f+ {* @+ q# e
  21. )7 N7 S  i* D* v4 o$ e( `# a7 |* |
  22. **/
复制代码

' w7 H  {' j: _+ D. {( K! F7 n4 F% s$ i% T4 ]3 U4 X# e





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