cncml手绘网

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

作者: admin    时间: 2019-1-22 10:01
标题: php字符串替换的几个函数
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
0 x+ l) j- w4 D0 q& B
strtr()的用法:
  1. <?php
    5 i# `2 o+ A6 ~* w$ A

  2. 1 H  J$ m3 F% J& S9 f; e
  3. $str = "test";/ r) K$ L; m* t. Q6 t. l
  4. 1 ?' l: K9 `* e' r" t" s, y% J; r* h
  5. $str1 = strtr($str, 't', 'z'); // zesz
    9 e: H4 S  h, ]- Z& X) G" Y
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    2 R/ }# F7 J/ |/ B/ l
  7. $str3 = strtr($str, 't', '');// test
    6 W- Q6 ^% V' c4 z" J
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    8 ]% `- ~9 X4 h. t* M# K0 s

  9. ' o1 R% x* Z! m0 Y9 L
  10. 9 o1 R( t+ i  \, _) N+ s
  11. $str5 = strtr($str, array("t" => '')); // es: c& e# R8 z3 l1 N. w' h
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

2 z# o6 |* d7 C4 Z4 I
  有两种传递参数的格式,一种是数组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

1 s# J$ p1 w/ [/ h
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    $ _! U0 N, x- h

  2. 6 q, D0 H) D8 P8 t
  3. $str = "test";9 r. G' k1 Q9 J1 ?* r" _% n2 U

  4. ) E& c: H# P- ^9 e
  5. $str1 = str_replace('t', '', $str);// es/ r& {$ W: r% n! d  C
  6. $str2 = str_replace('es', 't', $str);// ttt% U) j) O! s* E4 N  W4 u* Y
  7. 3 e+ g' c3 i# n! y! H3 ]9 z
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    - z3 t) m6 }! X. Z2 J. P
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    8 j* \0 Q, r9 M/ r& @' R' `
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
    3 X! W* V; J- S* D
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    # z  Q" D! n9 Z; ]( ?7 u- N9 h
  12. ; l/ Z, r7 {# i7 R
  13. $arr = array(3 h1 [7 @4 _; z5 n6 @0 q
  14.      'a' => 'testa',, e. v6 L+ B+ r6 K" }' B4 C* H3 z  X
  15.      'b' => 'testb',$ \, }4 j! }3 \2 I4 a. x+ L
  16.      'c' => array(
    ( {$ p2 }7 e( ^
  17.          'ca' => 'tes1',
      n1 g' t" Q+ ]/ x; c% U% B
  18.          'cb' => 'tes2',
    1 w& m- x( \9 d
  19.      ),
    ; {4 V' J/ t* \7 f6 P% n" ~0 t3 ^
  20. );
    - ^+ j& {* i" G

  21. + R! T) @" Q5 A% z: q
  22. $arr1 = str_replace('es', 't', $arr);) R0 k( T7 e3 r& q) W. T
  23. /**
    + X) d, V. \: ^: Q7 _4 a: Z4 ?8 I
  24. $arr1 = array(
    9 k9 @  V! p! O* }1 C2 l- H
  25.      'a' => 'ttta',
    7 b% H7 n% b7 ^( G, I) f: A* A
  26.      'b' => 'tttb',
    6 g# D. \) h+ q7 X$ r
  27.      'c' => array(9 p9 Q% M+ z# B+ n9 x8 l
  28.          'ca' => 'tes1',+ X6 G( f. y. o3 B* N5 c7 |
  29.          'cb' => 'tes2',
    3 t3 B: M$ W$ [0 G' ?" u
  30.      ),
    ( J! r6 A  p& f2 ]% N! d: v' p
  31. );: B5 N. F- e0 U, ^
  32.   *
    + H: T# U2 c1 W# W3 M
  33.   *, N$ I( T) R' X& f5 R, x; z
  34.   */
复制代码

9 X0 J3 s% o' |6 }: b
' m# n) i1 @' @2 b4 `( D% ^0 p8 J* R- L
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
0 L! _( G' r1 S4 s. o6 i1 B. O
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    1 B, r1 |# O2 E

  2. 2 Y  u0 L% }  |7 `2 p6 F. v! S5 [
  3. $str = "test";
    * e  U( n5 Q; ^, I# B0 n3 F

  4. " s. x: V, z% n5 E6 Z- F' D; j
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    6 l& b9 c0 U) U9 m0 r: A* u; q

  6. , u& r3 Q/ @& A, I8 M2 b  S
  7. $arr = array(: }1 f7 \  |4 \7 q
  8.      'a' => 'what',
    / W  _+ N  E4 t* f6 m' U8 W
  9.      'b' => 'are',$ e: k$ j4 g. d; A- _8 M6 y5 t
  10.      'c' => array(9 Q) p  w. t9 k! ?6 ?. N; l
  11.          'ca' => '11',
    . A" p! r  Z/ D5 E# P9 n
  12.          'cb' => '22',
    # B2 c: z% v" d8 E$ k0 ~9 t/ b
  13.      ),
    ( s* l& J' n. V9 h/ S! v- `
  14. );
    # {* T. v2 Z/ u, j5 ~
  15. % m( v. J4 G  v3 k0 x' k
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);. K* w- s$ C; [/ H
  17. /**
    $ t: q0 {5 |! R+ s3 t
  18. $arr1 = array(9 u* G: S% ^& E- s3 S' n' U  R+ F
  19.      'a' => 'okhat',
    . ~. B1 O7 `! r
  20.      'b' => 'okre',; }  v- o1 e% r1 p* {
  21.      'c' => 'okarry'* @- m1 B; L. ^% \" R* {
  22. );: B+ @5 G6 W5 J# V( G
  23.   */
    ( I7 N  Y; @  T' \4 B
复制代码

' x& Z9 f  D0 e
数组替换的时候,也是处理一维数组的字符串值。。
0 i; S( E/ e% {8 X1 `2 M- _' f4 y' x+ d2 Z
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
    6 l5 l% C% x, _; N

  2. ! e; B% T/ ~4 I5 l# X
  3. $arr = array(
    , S/ J6 Y" U; w: E
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头( X; ~# o, B; s4 _( [0 [  b; j
  5.     'b' => 'XXX13188887777XXX',) o! x1 Z$ z- O. n+ k
  6.     'c' => 'XXXX918811113333XXXXX',
    ' [! F/ b; E& _& j! C, J
  7.     'd' => 'XXXX188111133331XXXXX',. Y0 D3 u% V7 m& }* ^! f% F7 a
  8. );
    3 q' m8 l& C# w& m
  9. 8 D+ L4 t7 M1 x9 Z) d) y
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    ! j9 y' r5 l/ }& ?; q" h

  11. % i8 B7 q% ^) P* }: q0 S
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
    . W6 T/ u* {7 \2 ?( T" X3 l
  13. ' `" w- {+ I! n
  14. /**! Q! R+ ^* j5 y9 V
  15. Array
    2 R7 j# ?1 \8 q4 [
  16. (1 \1 _# t5 @' O+ M2 i
  17. [a] => XXX25012349999XXX* [' K5 T8 ?2 F5 ?- f3 ]
  18. [b] => XXX mobile:13188887777 XXX! v6 c8 {+ e$ A1 G; K# s
  19. [c] => XXXX918811113333XXXXX
    " X9 n* ]" f+ }! ]
  20. [d] => XXXX188111133331XXXXX
    & h; E" A5 P+ _4 [9 D& o
  21. )' G; L! u) }0 [" j7 q
  22. **/
复制代码

$ m& H$ U  k; [( {# v" e  ~/ _. G/ Y2 ?5 A  b" n- S2 [9 Z





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