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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

2 x) a8 x$ }5 c  o; I
strtr()的用法:
  1. <?php3 N. T4 p/ ~* }& y. ?& `
  2. 5 o+ ~- p+ A1 w5 M  J6 Z3 @
  3. $str = "test";
    # \# v9 m7 c% Y1 @* r: T
  4. 9 |- w% N" E8 A  \0 i$ H8 u5 s
  5. $str1 = strtr($str, 't', 'z'); // zesz
    0 r! U( G4 c5 o+ u# J" W
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
      X! x0 {( m% @4 I/ W& N7 Z9 `
  7. $str3 = strtr($str, 't', '');// test
    ; ^5 o" d4 u. |9 U0 [% c
  8. $str4 = strtr($str, 'ts', '12');// 1e21( N( f; z) _% x; ?9 {; @1 w; W3 v

  9. * k3 N6 ]* ]8 D" ]+ D6 i1 O
  10. . L) N% B- E( W0 C* ?
  11. $str5 = strtr($str, array("t" => '')); // es7 H. _8 I# {) G. W& y$ u
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

0 A# \4 ]. |; W2 P: a; z/ @$ k
  有两种传递参数的格式,一种是数组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

0 E7 h' k1 N( W7 p4 L9 ~
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    % b8 `$ H3 P6 t! \

  2. * ]! E$ x/ v0 ?* n
  3. $str = "test";8 R2 \2 a( y4 g* R' z# e2 `

  4. 7 n. A, a0 n' T+ [
  5. $str1 = str_replace('t', '', $str);// es
    . @) Z* ^* q  w1 K) \
  6. $str2 = str_replace('es', 't', $str);// ttt
    : d6 m8 \: M. W5 h7 Q
  7. & ~; t9 J2 n$ H
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb6 i$ d7 R7 G# y, q7 b  {
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    6 K( o) `" X0 d  N! e# {
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa) t$ }8 }( I) o$ U& J7 Q( s, C) V& N
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee$ v! y7 J8 [/ w7 H# C

  12. 9 l% H+ ?( n# Z# P
  13. $arr = array(
    / u, p; o8 `" [" P6 |/ W
  14.      'a' => 'testa',& D& N% o" u3 A, k, [) H" v
  15.      'b' => 'testb',/ U4 l7 D  d* X$ a' B" O
  16.      'c' => array(% t; O: C$ u8 `9 |& C
  17.          'ca' => 'tes1',8 h8 m9 U6 h3 d
  18.          'cb' => 'tes2',/ C/ L' F7 e$ t2 Z  p! ~( z
  19.      ),1 F0 f3 I; c) c/ E7 k6 ]
  20. );
    7 C3 R5 H/ m% p% X. P0 Q# ~) B1 w4 u
  21. ( k& z, [0 I5 L% ?5 F' ~
  22. $arr1 = str_replace('es', 't', $arr);
    6 C+ C, P/ K, o# `' L6 M
  23. /**
    4 ]- Q( f, z) C- I+ F
  24. $arr1 = array(7 l  C' u# M3 K2 X. D' G- z* B
  25.      'a' => 'ttta',
    " _4 D( C$ N1 g" H# `" g
  26.      'b' => 'tttb',
    . F0 j3 N; u$ P" h* M) _4 o
  27.      'c' => array(
    7 ^+ |( f9 s* |6 |& P
  28.          'ca' => 'tes1',8 S+ x" e/ L! ?. X1 X2 u
  29.          'cb' => 'tes2',
    6 h6 m- C" q; o4 E" h
  30.      ),
    % n/ B, g' B) z8 ]- I
  31. );( M6 O* j6 s5 G% U% \9 O+ H. X0 h
  32.   *
    1 [, D$ b) Y- K+ F0 S7 j
  33.   *# _2 H% a4 Q4 A( M0 B% S
  34.   */
复制代码

6 ^, L' [8 c; g2 P
! k6 A5 z9 q' D! W5 q/ R  I8 ~; m) i6 a1 y% ^% I6 d: K8 @
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。

3 a; @, t! G, [. P, I2 n
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    9 A: |$ C! d+ h, ?
  2. 4 N: k" z0 ~' t) x( O7 s
  3. $str = "test";
    ! d, t5 b; t, S, p& F( `

  4. , y2 s+ r3 n1 B, S
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    & ]* y, X5 q; l5 C3 U4 O

  6. & q7 {. g+ u0 m1 T* M6 l; L
  7. $arr = array(6 `  j+ C1 p+ m$ b
  8.      'a' => 'what',
    7 P& t) N- u7 k0 j) M6 g! S
  9.      'b' => 'are',1 {" J& i5 u1 m1 n; J* r% K
  10.      'c' => array(# p, e- U! _; _: g% C
  11.          'ca' => '11',, P6 ]8 N# ~$ U7 G/ s
  12.          'cb' => '22',9 _5 y4 |5 m1 ~" y3 k0 |, a' R
  13.      ),
    ; K4 O% l8 V2 o6 N
  14. );! [3 Q/ l! z" {3 ^

  15. ) ~- u* U7 `% j6 D! y
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);
    . l* H) I+ k, [4 o$ D4 t+ L
  17. /**) m& y* n7 T7 Z
  18. $arr1 = array(* n* l/ F/ p! P3 b
  19.      'a' => 'okhat',$ p' K: c! U  u9 h6 S1 C
  20.      'b' => 'okre',
    ' q9 E  I# a+ M- e3 i  n- O
  21.      'c' => 'okarry'* q' M5 |( s' ]
  22. );0 f/ L  U9 q3 _! ~% E
  23.   */1 m6 O6 Y2 Y, G- Z7 {- u. z9 n" h
复制代码

4 m& C$ {$ d) b. v( r- }. \2 L
数组替换的时候,也是处理一维数组的字符串值。。
  J& A4 b( R! V0 e# H' E
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php; X6 C! u$ n" m* N# k6 N9 ~  Q
  2. * F5 h) G7 }" |5 x
  3. $arr = array(
    * L+ G; T) ^' A) a9 H1 T
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头  w" k* C: l3 ^9 S. V3 Y. T
  5.     'b' => 'XXX13188887777XXX',# @8 U8 w- n# H. B9 X1 U# O
  6.     'c' => 'XXXX918811113333XXXXX',
    6 R# d& o! n8 f/ _& D  B+ K* k& I/ D0 X1 `
  7.     'd' => 'XXXX188111133331XXXXX',
    : [9 y3 M, n& P8 \
  8. );8 q2 h% w1 |& k4 N  @

  9. 1 Q0 b( R3 }. B8 o; Q. P8 M: R
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$39 x: i& C4 M. Z5 \  N

  11. 4 s9 Y! B) b( T+ [8 Q1 x7 n& h
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
    5 C' u# l2 d+ m. G9 K

  13. ( I8 l4 `7 l% ?+ Q+ Q6 v' Y
  14. /**7 x% `- x- F2 m1 c
  15. Array0 Z# H; D8 g8 B5 z9 c8 m
  16. (
    3 H+ A  J4 P8 D$ W+ B
  17. [a] => XXX25012349999XXX0 O4 v: H2 \7 @5 S
  18. [b] => XXX mobile:13188887777 XXX1 F/ i! z( d' I; n! W
  19. [c] => XXXX918811113333XXXXX
    % C! R1 a" p. ]5 ^- }( N+ l7 Z% V
  20. [d] => XXXX188111133331XXXXX
    & k. k& L* x  V  n& y: p
  21. )
    5 O( o  l: d% E- T1 C
  22. **/
复制代码
+ r& J" [+ z, u5 H
6 ]) |( U+ |7 n$ F4 G  i2 i2 S4 ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-3 14:49 , Processed in 0.109572 second(s), 20 queries .

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