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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

2 t- \* Z% I, H0 @  v5 ^7 W
strtr()的用法:
  1. <?php
    " _; S- _! h: c  _  z  i/ K
  2. . i. O  f. q$ `1 ~) H$ N9 j2 |
  3. $str = "test";
      w- x- H4 t8 Q/ r$ ]
  4. . W% |8 h( K) |& `0 j6 {8 r
  5. $str1 = strtr($str, 't', 'z'); // zesz" U: \8 {5 g  O
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    1 }) z1 f4 W4 r
  7. $str3 = strtr($str, 't', '');// test  Y- ?8 G; I& w) s8 r0 H( ]
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    . V1 \0 o; o5 f3 X5 m* E" q
  9. ) ^3 U! p0 d  R3 J$ Q2 Z; V6 E( R) z

  10. ! s  f. O+ M5 A
  11. $str5 = strtr($str, array("t" => '')); // es4 T3 P! r7 P1 H0 A
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

1 }6 [# J3 b2 A! o- Z
  有两种传递参数的格式,一种是数组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

7 Z' i; Q8 L( R( p- Q4 ~
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php1 H6 ^4 Y; z6 s. x( n! j5 g
  2. - ?# x' c. e8 ?8 ~
  3. $str = "test";
    + b- e( a( g5 D
  4. 8 f9 u# I1 F& S
  5. $str1 = str_replace('t', '', $str);// es
    + h' q+ W3 R! j. y  {2 X
  6. $str2 = str_replace('es', 't', $str);// ttt* u. l( T* b) n

  7. + G( z- s8 [- N$ u0 H% e1 \0 W
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb! ]7 R6 L0 L0 @2 b" t3 M8 C; e
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae% i) ]! U* h6 N" U
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa4 c, e" M+ d4 f' T2 s
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    ; N' H* k4 |1 B/ h

  12. 2 }4 ~4 _5 z. K
  13. $arr = array(
    ( d4 Y- g6 x! O/ S) `0 t1 U
  14.      'a' => 'testa',
    * T3 G5 k+ g' ~1 I
  15.      'b' => 'testb',
    , G6 `8 e" d. X
  16.      'c' => array(
    , Z6 K6 w' I) `6 N( \3 ?
  17.          'ca' => 'tes1',
    2 H& T: t6 d- F- R
  18.          'cb' => 'tes2',2 H! d0 z; Z; z- J. ]! C
  19.      ),
    ; T& w5 H: L7 Z( k# h  k
  20. );' o) c- L0 P" U: z" L' ]
  21. 3 a6 z9 i+ [, \; L& a, e" }6 L
  22. $arr1 = str_replace('es', 't', $arr);
    : r! h% P; @2 o- q
  23. /**
    / g; I" Q# B3 T* o
  24. $arr1 = array(2 x3 P" Q# A  N8 L' {& u
  25.      'a' => 'ttta',# l, n, p8 F/ X* ~3 ^+ r
  26.      'b' => 'tttb',
    7 K" J9 O2 {* ^* U  Y
  27.      'c' => array(
    ! j9 Y' H6 I2 b5 s
  28.          'ca' => 'tes1',* m# f9 t# V8 m! S" p( p' t
  29.          'cb' => 'tes2'," J4 |7 e) G8 `; r6 x
  30.      ),* ]; ?3 z* @* L+ F. G4 e4 R$ W) e) B
  31. );
    7 F3 i9 V$ U& p8 @2 _. z
  32.   *
    2 t5 _7 K; g3 j* A
  33.   *- g7 v0 j) `/ Y/ Z, S4 Q  B0 C3 j
  34.   */
复制代码

$ x2 ~) P2 W3 y' N
0 f1 l" P* B7 N% T' G7 W! W
7 G% J; G3 h% w; J/ Q
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
- n, O* Z! R+ K7 H# L3 X( b
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    + V; q' J! p% X
  2.   l3 a* \5 |1 {& y
  3. $str = "test";
    ! _; m5 ]9 M; Q% ?
  4. " n  J3 k' W5 E  c
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt8 ?' H" I- S0 A+ Z/ w# Q$ l$ D

  6. 5 {, a& r  B3 _( k* ]; r7 g6 Z
  7. $arr = array(% R' L5 u8 R6 h, y3 i9 m# C
  8.      'a' => 'what',
    " I9 |- J# r% ~& w
  9.      'b' => 'are',
    . {- a; o, I  \# v! T
  10.      'c' => array(  {& `' q6 h- Y
  11.          'ca' => '11',
    % a; d4 S0 Y  I$ s! J7 N
  12.          'cb' => '22',
    - J) @" l* i% Z8 T: K
  13.      ),/ X* o4 ]* t9 f( p+ m: L
  14. );  N: D' G* W7 E% |  V+ ~( n

  15. 5 U+ f$ [4 ?( r  c! i
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);
    . [; F7 R3 k: `3 r( M
  17. /**
    8 P4 L3 z( P( F. y& }
  18. $arr1 = array(
    ' s# F$ z0 {3 T* _2 R- j' y: ^& E& _
  19.      'a' => 'okhat',# Y/ C" y- h" A" x5 F
  20.      'b' => 'okre',  W/ c! H" A5 [0 a
  21.      'c' => 'okarry'
    % X6 o9 u8 q9 B8 p  B* ?* \6 Y
  22. );
    ( P5 Y" f" E% ]
  23.   *// ^! N: V+ C( W$ b/ }+ K3 a) D
复制代码

* R4 p- v5 f9 `) T/ Q- U
数组替换的时候,也是处理一维数组的字符串值。。

3 v/ N7 S2 p$ o7 a4 p7 {% C
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
    + m3 [  B& Z5 y: d

  2. % m3 s; S# @, ]3 C; N8 b
  3. $arr = array(, z( O4 B6 q- [! N
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头2 g2 Y6 A# g9 ^7 G4 Z
  5.     'b' => 'XXX13188887777XXX',
    , U+ A( y" e. m
  6.     'c' => 'XXXX918811113333XXXXX',4 d# r4 c' V5 g' x$ [
  7.     'd' => 'XXXX188111133331XXXXX',
    ! Q. s! z# d, }/ \
  8. );
    ! b0 `6 t" ?, |. y

  9. : U8 N/ T$ o+ v  _8 p+ F; r
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3% K$ k& m5 A% j/ v5 n! R

  11. ! _7 i' k& c2 S7 w% \7 t
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号. o4 a+ K- z* {4 s
  13. * b- s* h1 Q% M8 @! y
  14. /**; |2 w) \8 L6 g- T! [3 b. n) J+ s
  15. Array
    ) v, \3 u( l/ a0 b2 [& R4 Z
  16. (0 ]- z) c2 l4 V( ]
  17. [a] => XXX25012349999XXX3 Y  i8 N6 @9 p5 t$ X
  18. [b] => XXX mobile:13188887777 XXX
    * a/ d, I' d4 g, h) r! a/ j
  19. [c] => XXXX918811113333XXXXX
    2 }% T  v" t$ M, I% M9 d+ U
  20. [d] => XXXX188111133331XXXXX
    % Y9 c  l" L2 l' c
  21. )
    , y/ f  ~* L! B3 D
  22. **/
复制代码

; o2 `& z% h6 ?6 S; B9 ^) D/ }
$ F- f4 |  N4 P, e" G
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 18:09 , Processed in 0.080781 second(s), 19 queries .

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