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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
' C1 @+ X) b& i, b) P6 c
strtr()的用法:
  1. <?php
    2 w5 }/ N. B: z# f# ^( E6 J0 l
  2. % _6 l+ O( _  B+ i, @% ^  c4 q
  3. $str = "test";" i6 j" w* q! b# t: @. @* i
  4. 4 ^+ Y9 a7 @$ g: |
  5. $str1 = strtr($str, 't', 'z'); // zesz
    9 ]7 a+ A* T+ {. S8 t
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1' G5 [: h2 p5 u" E- X+ d$ W
  7. $str3 = strtr($str, 't', '');// test
    - m4 M+ j8 V, p/ Z
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    : N' W$ u& y( I2 e) {
  9. & |4 \7 q% g* P) f: K5 R& H
  10. # Y2 @: E9 r2 A  D
  11. $str5 = strtr($str, array("t" => '')); // es
    5 `3 c, R6 j2 n/ V) s7 S5 _$ ?
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

+ u+ |' H4 G8 T0 d8 b
  有两种传递参数的格式,一种是数组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
$ B; [9 t9 Y, l9 K' C
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    7 |9 G% K( G2 a1 A7 }% W5 C. r2 P

  2.   @" ~# h2 e% O3 \1 T
  3. $str = "test";
    * k0 O/ y! D0 a" F+ M2 R4 p

  4. ; ?3 S* a2 d& r& I8 ?' i# k
  5. $str1 = str_replace('t', '', $str);// es
    1 }2 X$ o/ K1 m5 g% ~9 [
  6. $str2 = str_replace('es', 't', $str);// ttt  V. S8 R& d6 J% R. b9 e; o3 @: [

  7. ( x- C1 R; g" U, _: d' n
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb; b  ?5 Q/ y8 h
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae) |; ?2 q8 p' y3 a- R
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa- b; S; G  W4 p4 h: ^  d1 m
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    - `: `. W" L% U

  12. . [7 D: a5 H  }+ y" F9 D. n
  13. $arr = array(( \' q' W5 _4 K, ?8 i
  14.      'a' => 'testa',
      T5 l' r2 q# R' Q6 R
  15.      'b' => 'testb',
    % I: `* s) P  b: r; ^  t# f9 A
  16.      'c' => array(5 @5 _! b3 ~& e( U
  17.          'ca' => 'tes1',
    ( T7 [. D- r. }; y0 N
  18.          'cb' => 'tes2',
    - Z" W+ ]0 T4 K% Y9 _+ q
  19.      )," z6 _+ N& P) H! W6 E0 t
  20. );
    8 x$ d6 B! g: \: ^) O7 U
  21. * [: W* X1 q. t
  22. $arr1 = str_replace('es', 't', $arr);# U4 `' }) B9 x# h& ~) o
  23. /**5 N9 d$ x  _( A0 w, i9 w
  24. $arr1 = array(3 e, z2 p$ \' G# D, l
  25.      'a' => 'ttta',
    4 N/ a5 \' i$ I
  26.      'b' => 'tttb',8 h) a  [1 e) S) A7 g( A1 z
  27.      'c' => array(; Z3 M  h: L6 F
  28.          'ca' => 'tes1',
    4 I' U. ^9 Z/ f8 P% a( T
  29.          'cb' => 'tes2',
    / Q& ^3 p7 t+ I) G0 M2 j
  30.      ),
    - w/ M% [7 p8 K& Q, R
  31. );
    8 H# k# m" ~/ H8 j& v; ^
  32.   *4 q3 k$ q4 t6 m
  33.   *5 u0 N( N8 n- A
  34.   */
复制代码

  L$ h: K* ~/ l, P( L* k# r
7 e5 e3 ^6 M+ a  T2 U: X: q- |! Q9 o$ ?- N
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
2 H1 o- y3 h& `8 S  Q
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php' n( s. ~- f9 A5 w4 W$ H
  2. " Z7 S% u' p$ |3 h8 u% E
  3. $str = "test";
    4 P/ }: l) X  K5 ?3 |" x

  4. 2 e4 \7 F; K+ n: @& o* m
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    + }6 I4 u+ J$ o6 E9 j' b
  6. 4 w" A2 ]4 W& v+ K* L% L5 d8 ^
  7. $arr = array(  ^  C2 P2 n- W+ T0 h
  8.      'a' => 'what',
    4 a- s9 w' x" o5 i! Z( ]8 x2 i
  9.      'b' => 'are',* L$ W8 H$ J$ i/ H6 h9 y
  10.      'c' => array(+ n0 X3 [  H$ O6 f5 |, I
  11.          'ca' => '11',
    9 Q$ i% I6 p2 {4 g2 o
  12.          'cb' => '22',
    / @4 e% H; J9 T& V% j9 a/ O
  13.      ),$ A* |& r! T( g
  14. );4 D  V' i7 ^5 ~# Q! S

  15. + _, [$ z- f5 U" C8 p
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);# F5 e8 _, a: K
  17. /**6 M5 \! W! h3 O( ?7 X+ R# R* T3 T
  18. $arr1 = array(3 `4 S; \1 O9 ]. N  K5 ^8 N
  19.      'a' => 'okhat',
    / `( m6 B# w% q3 H+ M: g( q
  20.      'b' => 'okre',
    3 X, C0 C" F* a' i/ P2 u
  21.      'c' => 'okarry'
    8 @: Q: A. F  n3 y' j) P* ~' X
  22. );
    & G8 F' I; T2 e* e/ F; r$ U0 z# i
  23.   */
    5 A2 Z+ K5 ~: B% U6 n7 h
复制代码
2 f1 J/ O& Y+ l$ o7 ?
数组替换的时候,也是处理一维数组的字符串值。。
/ b7 U' \3 A) O) ~2 s; v
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
    4 [  Z( l! J3 _8 R  M! |- f

  2. " R) @. i3 p' r* `/ e. E) E2 @
  3. $arr = array(3 d# J, l! D* r. v5 r. S
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头' z* g' O0 R) G  B0 \  S
  5.     'b' => 'XXX13188887777XXX',1 j# C  A$ w# q
  6.     'c' => 'XXXX918811113333XXXXX',
      `1 x  M6 i) {2 d6 z
  7.     'd' => 'XXXX188111133331XXXXX',
    . a( B7 y* w% p9 Y
  8. );
    ( H( [: n5 z) x; r1 h# D
  9. ) s1 P5 P  r$ `1 h% N, B/ R: k4 y: |; z
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    / e" N5 u1 \; G& i

  11. ) N& m" U% A! Q" f) l# X
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
      a4 j2 F4 D( v. K6 w

  13. 8 @- G5 M# Z' @9 A
  14. /**. k5 ?7 t/ f% ]" V. w1 R: Z! C
  15. Array
    3 `7 m  y" g# C
  16. (
      U6 g$ ^7 U* O* X% H! C+ Q
  17. [a] => XXX25012349999XXX
    7 _6 K; J. ]" x5 z0 t! D! q
  18. [b] => XXX mobile:13188887777 XXX( j- W0 n  s# K, M- j3 d
  19. [c] => XXXX918811113333XXXXX
    / n- G1 i' T- M" t; G8 H
  20. [d] => XXXX188111133331XXXXX
    9 P/ M3 t: E# M; J# h; L6 F( P
  21. )9 a# H  K+ K+ Q0 Y5 _/ o/ H+ i
  22. **/
复制代码
1 G" r, X7 `. M8 c# j4 v: ^- @) U
# O' l5 ?. \( d0 B
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 20:50 , Processed in 0.082818 second(s), 20 queries .

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