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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

0 k7 I  m5 d8 O6 A+ V/ P* Z( m, P% L
strtr()的用法:
  1. <?php9 {! A4 f) P) I! a' G* @% ~

  2. 5 ]1 c' g+ R+ N4 u1 y' i
  3. $str = "test";
    / c* K" M& a* D/ J9 ^
  4. ( m! u/ u3 D" V+ v3 `# C- J
  5. $str1 = strtr($str, 't', 'z'); // zesz
    & C2 E6 \9 m( k* a& L; i% M4 Z
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    ; R1 r4 I) Y6 l0 p' B) h  j
  7. $str3 = strtr($str, 't', '');// test" J  y; i9 E2 X* M$ [$ v9 J5 _
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    ( m5 U# ?& l: S' R' `/ r7 D
  9. 7 z+ b. G; A" |" m- t
  10. , j) |6 ]2 w' U0 n+ {/ R
  11. $str5 = strtr($str, array("t" => '')); // es
    1 t) C) k( G- ~& w- x
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
) Q; V3 J0 g+ B9 F* h: a
  有两种传递参数的格式,一种是数组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 ]( f  G3 q  u
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    $ h8 I- ]( X8 f$ M' n: }( C+ B

  2.   E# s4 [( M; j1 u. t' x
  3. $str = "test";
    , q: Q7 k' b1 _6 U5 S6 [

  4. / v; {3 R" D! C* h4 `
  5. $str1 = str_replace('t', '', $str);// es
    3 S2 V- H/ @$ r- S9 ?8 F( _+ g
  6. $str2 = str_replace('es', 't', $str);// ttt
    $ H9 z7 H- S: P" o* `& _7 K9 O1 g

  7. . U; e4 h# b/ u+ E7 [) k) v
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    : J0 g# [! G* \3 b- ], o5 S
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae: D$ z" N' h- V. g! e, h
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
    # Q9 }4 F) r8 m4 N, a* [7 o: K# ~
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee/ z8 h" Q5 V  I8 I- E' P/ E
  12. , ]+ G$ E: R$ x# a
  13. $arr = array(4 Y2 W+ ~7 a+ l( f+ d! m
  14.      'a' => 'testa',8 ~' f* \% `8 O- A, Y" w9 g1 x1 _
  15.      'b' => 'testb',
    " O2 S$ ~- f3 H  o1 @
  16.      'c' => array(
    1 u9 o  Q- h$ e$ H1 r8 X
  17.          'ca' => 'tes1',
    % q) C, O1 c3 d$ C* x; S5 I
  18.          'cb' => 'tes2',1 p4 K3 {& M4 A: O
  19.      ),
      K9 o; R1 Z: _' b6 r+ M7 v
  20. );
    * G/ g% A0 {" q" G& x( a" y: |; F

  21. / s$ ^& L) v% I8 Y* p
  22. $arr1 = str_replace('es', 't', $arr);8 [7 P* I) Y: \5 W
  23. /**
    4 a2 r  ~( }- K5 m
  24. $arr1 = array(
    $ }( [% O% p* k* [+ `- i& R1 m
  25.      'a' => 'ttta',7 L+ Y: K3 d+ `
  26.      'b' => 'tttb',6 ^. O5 r, P4 [! N* K
  27.      'c' => array(' ~; J; Z$ ~0 L. e% G' O
  28.          'ca' => 'tes1',
    8 G7 c" [7 M$ C& t
  29.          'cb' => 'tes2',1 s7 h5 W% B' d4 n
  30.      ),& W1 b/ }, o: E' z3 g
  31. );
    9 F- }6 A( ~& _0 f
  32.   *; h! z  t( ]5 v& c# ]. u
  33.   *
    ! i$ O2 \( x/ o$ J( u& A" D
  34.   */
复制代码
1 N5 s6 _0 n$ \3 {6 b5 G

+ V: j+ a- p/ t+ r
3 @% E" U* Y+ [0 t/ J: ]  H
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
6 `  F: d6 @! `8 a  r4 t9 |
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php1 f# H0 U3 W. p: S( S! M  ?
  2. 3 [6 q( a8 l' w, q9 p" y
  3. $str = "test";
    3 D/ {* V  [7 ?" V5 @) D1 }% j8 b

  4. 6 }9 {) _& R3 q2 e: r+ M+ e3 Y
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    & Z( F9 f7 d" i3 h
  6. 7 g; _- L8 K, m4 V( K
  7. $arr = array(% D2 n. L, [, u, `
  8.      'a' => 'what',
    2 N: @% a7 a) X: y. q$ `
  9.      'b' => 'are',
    ( {+ f  D, z$ d
  10.      'c' => array(4 O$ `/ b2 _, O0 i
  11.          'ca' => '11',( d' p0 A4 Y$ r1 t
  12.          'cb' => '22',4 r% E7 q, ]0 U$ C6 y
  13.      ),6 h2 @' J4 d7 g  J
  14. );
    # V; j5 k8 {: m2 ]4 Z
  15. % k! |9 r- U9 }
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);7 ~* ?3 X& o4 m. e! J. E1 p
  17. /**
    5 g/ ?; v  X2 q; z) r" o5 X
  18. $arr1 = array(
    3 [( c' k; I+ J) m' G: k& q
  19.      'a' => 'okhat',
    , |; ]$ t( ~& ~( g- W
  20.      'b' => 'okre',
    * q+ M: @# b" g: s
  21.      'c' => 'okarry'
    / B, b) ^$ Q# Z4 d
  22. );
    - p5 a5 a2 k7 n
  23.   */
    + q& \/ A: E1 ~0 n/ W
复制代码
! u( L! v% N- `& v3 m& s' X
数组替换的时候,也是处理一维数组的字符串值。。
  z" G% a. i, t- `
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php2 i) {8 T" Y3 b  W1 g2 _3 w

  2. * j! @1 b3 }1 J# ?+ D
  3. $arr = array(! D; \1 ^! E) H
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    , N* U2 g( n7 }* |
  5.     'b' => 'XXX13188887777XXX',! m/ B# W) h8 @+ @
  6.     'c' => 'XXXX918811113333XXXXX'," r( e; E5 v" L
  7.     'd' => 'XXXX188111133331XXXXX',$ \- Q" i* r9 _% b+ {. v/ s' }
  8. );
    / c7 |- y% \& M5 i

  9. 5 ]3 @. Z8 {7 z+ C
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3( ^; T+ c4 Q+ h* s; j) J

  11. - f+ ^$ s' U5 a: @: X
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
    " B) c6 A4 e" A" y! H

  13. 4 K! P  }+ Q4 @' o# O0 G
  14. /**" T0 V2 C7 I( G' C: S: E
  15. Array& e/ m8 E. ^% p1 A/ D3 O, G
  16. (
    1 u$ ^0 `9 T  j0 Z
  17. [a] => XXX25012349999XXX
    / J6 z' C8 Q$ s2 h7 \
  18. [b] => XXX mobile:13188887777 XXX, H! F: o; v5 T- p, P( J
  19. [c] => XXXX918811113333XXXXX+ L( Y$ O) S- l- J. r' ?$ R
  20. [d] => XXXX188111133331XXXXX( l( x  o- |- l& k  g  h
  21. )" f, b& I- [# y  N, w
  22. **/
复制代码

; g- `" r9 \# Q# s# M9 R) z: t% r, Q' r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-9 09:12 , Processed in 0.146671 second(s), 21 queries .

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