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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()

0 \8 ]" ]! j/ m
strtr()的用法:
  1. <?php
    2 Y, F% i; h/ `' `' R5 u

  2. , |1 m$ x: w& w1 T- s
  3. $str = "test";
    / X5 q7 Y. @4 ]

  4. * O' A) \: J* _1 F/ X
  5. $str1 = strtr($str, 't', 'z'); // zesz) w- v8 ~0 C, A# t+ }
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    ! U" n* H0 `0 ?0 ~- g
  7. $str3 = strtr($str, 't', '');// test
    - n7 ?; O& P+ o1 x" D. b: W$ B$ V" [
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    : _: p8 c3 B4 R) }3 Y6 ~

  9. + ~: ^- d' P  U5 v' n

  10. 2 ^3 y9 Z0 E, r5 x+ _' x' n8 @
  11. $str5 = strtr($str, array("t" => '')); // es
    ! v+ e/ F! ?3 ]; Q/ V0 u
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

- z! V  n6 V2 D- E4 T* }! a6 _" v
  有两种传递参数的格式,一种是数组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
( M& \8 @- b4 Y  F* e" w
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    2 p' q/ U7 k/ t4 b# j; a

  2. + O2 ]$ P2 \& d, T5 R. M
  3. $str = "test";: f* ?. U1 A" }- _
  4. # ]3 _( @+ t$ o4 z1 D4 V! p$ D' G
  5. $str1 = str_replace('t', '', $str);// es7 d% f4 |- N3 r7 z# {7 B5 I
  6. $str2 = str_replace('es', 't', $str);// ttt; q+ I0 [; v  @% b. Z% i

  7. & \2 E/ F6 t% w2 ]* Z1 I. m& |) b9 X' u
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    ; @6 g3 z, W" ]+ Q$ c
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae7 F# k: y) S* }2 H3 X; b8 g# V7 M
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa7 o, w% K+ y% }/ B9 h
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee3 `8 a4 P5 Z) O- L
  12. . G) W5 E- @+ P  H0 e
  13. $arr = array(+ m* i# O- W- Q9 \/ j' B3 u0 N
  14.      'a' => 'testa',
    # G( f9 D6 i# r! `
  15.      'b' => 'testb',) h: q; P! |4 H/ S6 w
  16.      'c' => array(/ M+ v* I, K* h. D' e4 b" b  T
  17.          'ca' => 'tes1'," O1 {& ]( ?" T  U" Y( @
  18.          'cb' => 'tes2',% f# x7 z, k# F
  19.      ),
    ; W( h* A' g% {
  20. );$ r: ~% e6 r9 O
  21. 0 I" o  D$ p2 P0 C  y$ i8 P
  22. $arr1 = str_replace('es', 't', $arr);0 N0 h2 T4 t3 ]$ k: k& z1 n* O
  23. /**
    9 M( K' |" q8 g# ], {
  24. $arr1 = array(7 x/ Q7 _  F3 ~
  25.      'a' => 'ttta',
    0 a; e9 y; J" C( P
  26.      'b' => 'tttb',
    . {- j" V0 L8 T8 s5 h6 f
  27.      'c' => array(
    ) X! ]* Y2 c3 l+ F5 e" q* ~, N
  28.          'ca' => 'tes1',/ [+ |' ^; Z1 n3 l) G
  29.          'cb' => 'tes2',
    " d3 Q  q% `. K+ B9 V! D
  30.      ),
    - C# k) b) Y; C2 r1 f; f
  31. );
    " `* D  M! V( n( _' E! e6 B
  32.   *% o+ ?# {- o- c9 X
  33.   *
    $ }$ u1 w: w3 V( D8 ?6 u' G
  34.   */
复制代码
1 v7 ^: t) F# Q4 Q( K  c/ C

: e" d' K, S5 Q& L8 D/ R4 ~" V% p* [
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
* q; W) h8 S& U$ _$ y: J5 f
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    4 X, [& W9 S; ?
  2. ) K8 `; d+ o; [' V- W
  3. $str = "test";6 D6 E; K5 k) Y( ]5 v
  4. 5 l& {5 l; I5 {* X+ p4 [! ~
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt& C) V) |4 f) a/ p: ^

  6. # u1 i- w6 d% q9 q) s3 P, u" S/ U
  7. $arr = array(6 P7 l. M9 n' M1 e6 m0 J6 H
  8.      'a' => 'what',+ f' C" F, `: S/ V
  9.      'b' => 'are',) [. U' u" ]. h# y0 b4 m1 A
  10.      'c' => array(
    0 T/ U" @& r1 c. ^1 Y. Q7 b
  11.          'ca' => '11',# b4 R0 M6 O; h2 }& e! b6 i
  12.          'cb' => '22',
    0 v4 _+ @8 P. t' N" S' ^0 f/ k
  13.      ),. w6 `* d, s" M, n+ Y
  14. );
    * M' R" s6 o8 \. e$ W2 N% T' q
  15. 3 j' o5 k& v2 \) E) J. M9 V
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);8 u7 b# W# J7 ~0 E/ F; ?
  17. /**
    : ]6 H# `+ v8 F0 A8 d8 X
  18. $arr1 = array(
    ! C8 @& f' X+ }% O* q/ d# K8 G
  19.      'a' => 'okhat',5 u* E; t! l' N: B- @1 L( v+ N9 U6 M: l
  20.      'b' => 'okre',
    ( x% \+ k! S, v$ `/ D4 m
  21.      'c' => 'okarry': W! x4 U, x9 D
  22. );; V4 s% J+ l7 k( |, C3 {
  23.   */
    4 Y% d1 d9 r& e% T! K9 |1 V
复制代码
) P$ a- k1 d3 T" D
数组替换的时候,也是处理一维数组的字符串值。。

' ~; _/ Z) M& [" G. o
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php4 k8 f8 ^* E8 z& i

  2. $ _3 z# {( k& `. ?# {
  3. $arr = array(  U9 r+ K; B2 p3 M3 W
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头2 c; [2 r7 I+ ]8 m" z0 Q" h
  5.     'b' => 'XXX13188887777XXX',, G+ Q8 Q+ _# L/ v) O5 \9 j6 R7 G4 m* ^
  6.     'c' => 'XXXX918811113333XXXXX',  q, ]+ K& d7 I: p, V
  7.     'd' => 'XXXX188111133331XXXXX',6 T* Z1 w* Y6 V1 f0 v9 k) \
  8. );; e+ g' g9 {  X% E, v+ E

  9. ( U3 F9 w2 @/ m! B  G* ?4 o% K6 E
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3' u- v% o2 P0 z

  11. 4 i+ O& I& ]% _8 L3 U
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号$ H2 q% Z5 S# x3 r% K9 t. c/ ~) T
  13. % w6 j* d( O( `) h9 y; G2 [
  14. /**
    0 W& ^8 ^$ Z7 ]- w3 u
  15. Array* ^0 C& w) e1 ~
  16. (
    5 G5 _. ?. q2 R" g
  17. [a] => XXX25012349999XXX
    , K: d0 R) c  k; g8 b
  18. [b] => XXX mobile:13188887777 XXX
    ' n7 _# k: a' Y4 p$ e9 f6 S
  19. [c] => XXXX918811113333XXXXX- ?) w! F1 a4 x( k9 L  r( B5 X
  20. [d] => XXXX188111133331XXXXX
    9 t8 K5 K8 I; K9 j9 g* {6 l
  21. )! ~" y. c7 k& ?5 L* P
  22. **/
复制代码
' Y' L2 u7 {5 H* y' m9 J

6 ?6 u9 T2 D$ J& C
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-17 20:01 , Processed in 0.083707 second(s), 22 queries .

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