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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

9 t/ A3 K/ @5 _$ t7 ^
strtr()的用法:
  1. <?php5 L% y5 a' t3 F7 p
  2. ! _+ G7 ^  a  F5 P) {2 T
  3. $str = "test";
    + L$ G) ?) y2 \

  4. ; K* R, M+ ^; u# B
  5. $str1 = strtr($str, 't', 'z'); // zesz4 `/ r$ x& e. T$ F
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    5 a/ G/ @+ W4 s* p6 N, V
  7. $str3 = strtr($str, 't', '');// test7 f3 K/ j7 W) A; z: |7 H; o. s
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    2 y- q- }& o& Q# i& i/ i2 L% t
  9. 7 t0 ^( A5 N: A+ i* S4 @

  10. " r' z* p; E3 t( j: J$ Z) f
  11. $str5 = strtr($str, array("t" => '')); // es
    $ Y9 e$ j9 c  F- F, X* Z6 c# A. d
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
6 w; ]9 q2 r+ u2 s7 A' D5 |
  有两种传递参数的格式,一种是数组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
. }2 _9 {: O+ v1 c. h
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
      ^& K/ d2 }2 v) S! l3 s

  2. : V6 U& p1 N4 m6 ]( r
  3. $str = "test";
    1 G. q/ D. B8 ], B6 ?2 e# m
  4. ) I' L3 S( N& {7 P
  5. $str1 = str_replace('t', '', $str);// es
    . [6 r' s$ w( I+ J/ e
  6. $str2 = str_replace('es', 't', $str);// ttt
    5 n9 `# V/ t; N9 y6 y% o# O2 I" Q7 K

  7. ( a, A' ~0 |, a2 K+ q' B0 M
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb) `( a5 h& o/ c
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    $ S6 T/ O( ~8 f- H
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
    2 D. z: J* a3 ]6 b0 O
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee/ ]! d% n4 d) V- e# U9 I
  12.   ^, B  X6 u9 \# U/ Y0 E; e3 v
  13. $arr = array(& v5 P# _  I; ~9 q: ~0 T
  14.      'a' => 'testa',
    " K- D+ H' u. U" L7 E
  15.      'b' => 'testb',
    % w5 ]/ ]- s* I# @0 b+ ]
  16.      'c' => array() F& S- _1 C! y: ~0 T# J/ Z! L# V
  17.          'ca' => 'tes1',
    " `$ o; X4 ]4 g  j5 M. H/ l# R
  18.          'cb' => 'tes2',
      ~8 h5 F- h' K9 i
  19.      ),) W; k: \+ c7 q4 E  U% A/ }6 }
  20. );
    . S& s. o$ e( D* m  D  Q3 P
  21. ' R# o: B+ o8 K$ \& p  Y: e
  22. $arr1 = str_replace('es', 't', $arr);
    % d4 o( O1 L3 P, g
  23. /**
    / ^; H8 c( C: \+ u$ S
  24. $arr1 = array(
      b  _- N) B; N$ L# ^
  25.      'a' => 'ttta',
      c' ~" [' R  y1 l: b$ T
  26.      'b' => 'tttb',5 J1 f% \% g- @1 C' R. {+ f
  27.      'c' => array(4 k/ W1 o) b" D- ]; f$ V
  28.          'ca' => 'tes1',
    2 }% }/ ^6 I" [
  29.          'cb' => 'tes2',$ g; v4 m+ w, p& E* [
  30.      ),
    2 j! u& A1 {. b* e; L: E$ h8 ~
  31. );
    . _, H3 N" }; W* z! ]
  32.   *
    1 d9 P" }) k. k3 d* [3 z: C
  33.   *7 U- N& ?1 I( f: ~
  34.   */
复制代码
, Y8 {: n4 u+ O8 ~
) n! B# P+ u+ A
& G& F# s: Y1 d* `" z7 v5 ^$ ~
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。

0 F9 h3 V" C$ T. O' l8 r
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    ' O* ~1 z. \# V+ ]* `! O
  2. # d6 q' t% @1 L. l
  3. $str = "test";- V, k& ^" Y4 ^; O/ ?
  4. # X9 [; U- w% }
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    7 h+ ]& l1 |. C1 z6 E
  6. 2 x- {, K$ W" u- F# \
  7. $arr = array(9 h. _) f; o, a& m
  8.      'a' => 'what',
    " S2 K3 d9 D3 o% e
  9.      'b' => 'are',' f" C3 c7 `* g  P
  10.      'c' => array(6 [8 l( x& N) I% W# G
  11.          'ca' => '11',
    * b6 s: W% `* C" a6 ?! O
  12.          'cb' => '22',
    9 M( i+ n# G. q
  13.      ),! z2 V8 E. A8 {- D; e" I1 o1 l- n
  14. );
    / g( p9 Q- U  x9 p9 h
  15. ! `# P9 {6 O0 a; u; O
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);
    % U: ~. y7 c/ P- A9 C& s5 N
  17. /**
    , F5 A! l+ _8 {6 r
  18. $arr1 = array(
    0 N$ R9 Z% X8 k& y( w
  19.      'a' => 'okhat',
    1 ^! w3 o3 _) E) b1 y9 t- a/ R6 T" f
  20.      'b' => 'okre',
    ( {; ~' E: j" U! N; u' b! X
  21.      'c' => 'okarry'9 U9 v% d2 a. b9 K' x9 G
  22. );
    8 R3 s8 x9 r" r
  23.   */
    2 C! R( C2 l( R7 n: y
复制代码

- Q/ z# b+ l, ]$ [% d( m: N% O
数组替换的时候,也是处理一维数组的字符串值。。
- m  L! o" Q- F$ j1 d* `
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php7 Y' X& T3 m6 y5 b" ~  E1 ^( s" \

  2. 1 j8 Z$ J$ Z. }  [. ?% Y2 M- N
  3. $arr = array(+ A( C+ E/ k& R. L
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    ' |$ R, a5 @8 |* y; {# i
  5.     'b' => 'XXX13188887777XXX',5 g( l, m9 {" X5 [
  6.     'c' => 'XXXX918811113333XXXXX',
    ) r* y5 f! D% ~
  7.     'd' => 'XXXX188111133331XXXXX',$ B% R- A0 s- A$ G! o" a) A
  8. );, _7 U8 T" ?4 b% W# }9 @: P; a
  9. " y. w2 \: F% O% `$ P2 B
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    . _) D  T8 T0 ?3 p

  11. % O# @5 y" `( b
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
    6 q8 B/ \  F2 R6 B9 z
  13. * F% x- G* z1 N8 d( W
  14. /**
    7 e( x9 y8 A  S7 H& t$ O
  15. Array: H) y3 U. Y/ a1 i: O+ |) x+ q
  16. (
    & o! Z+ [+ _9 @* p; x0 l& ?2 D
  17. [a] => XXX25012349999XXX4 M2 L* @1 `# \- d4 f
  18. [b] => XXX mobile:13188887777 XXX
    1 M4 S; P; A! O2 J: w
  19. [c] => XXXX918811113333XXXXX: i1 o7 N; B3 W
  20. [d] => XXXX188111133331XXXXX% g! x. E9 b) Y( V( x0 t' }. b
  21. )
    , M3 h1 z" ?7 z/ Z0 N; L
  22. **/
复制代码

$ a7 W' a  A0 @# i9 O# H& ~; s) q
0 k; n, L7 u- K2 r% t! }( [* m0 e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 11:39 , Processed in 0.053587 second(s), 20 queries .

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