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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

9 L  z6 I+ M, ?4 p+ E- t
strtr()的用法:
  1. <?php
    - G) `* P$ S) {8 X) S

  2. ( m- d$ a/ _8 M- A: p
  3. $str = "test";
    " C/ L* g7 a# l. k, |8 f" @- M1 P; O2 H6 {
  4. ' U3 I' q3 @- {$ k
  5. $str1 = strtr($str, 't', 'z'); // zesz
    ; K( q, Z$ a9 |2 a
  6. $str2 = strtr($str, 'tt', 'z1');// 1es18 @* J' q7 ^2 e6 c
  7. $str3 = strtr($str, 't', '');// test  F3 v! W) y/ D& [5 l' \
  8. $str4 = strtr($str, 'ts', '12');// 1e21
      M( D& f' m& |8 _5 Z% z3 r% V3 d* h
  9. % t  {5 \, D0 R/ z7 P" \
  10. + F" h5 \2 s" b, O# H3 L
  11. $str5 = strtr($str, array("t" => '')); // es% ~( [) v- H7 L5 b
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
+ n9 @. n+ P$ k8 V( D$ 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

8 R8 Y- Y4 w8 P! z
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php4 X  c; [3 ~# y5 n- H

  2. + C' f# ^5 T% {9 J* J# G* i
  3. $str = "test";
    7 t5 f! Z6 i: I$ K; F

  4. + s2 ]" z5 r, f! R5 X# [& Z
  5. $str1 = str_replace('t', '', $str);// es
    . V+ Q& m/ g/ Z+ |: u; y( G
  6. $str2 = str_replace('es', 't', $str);// ttt
    " z: [5 s! a# x. c& \( c
  7. 1 J) I1 e9 k4 S& \# X
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb1 A9 b# F) H6 S4 O
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    # f7 U5 L4 R7 N7 C; O2 c, T" J
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
    " T; k% M" I, C$ k! d
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    % r6 v3 J6 v0 V- u

  12. + L3 u3 b( K# E) e! U3 k4 t
  13. $arr = array(( ^4 c/ |5 @: n& q. n8 N
  14.      'a' => 'testa',
    + ~$ ~; B' e% A- ^
  15.      'b' => 'testb',$ R; s: |' p9 O5 H) W: E: R8 F
  16.      'c' => array(. G( k" w5 b5 P5 ?- m1 A. z! E1 b
  17.          'ca' => 'tes1',6 B% P7 b+ I4 D
  18.          'cb' => 'tes2'," j" U; p; l5 [
  19.      ),/ P6 _% K' }$ I# ]
  20. );! k/ N( R9 _2 e' w' B) g- I3 B/ _

  21. 0 a3 |8 V4 P  G! e( n
  22. $arr1 = str_replace('es', 't', $arr);
    $ C2 r2 F# X" w+ m$ R3 ]8 [2 ^! [2 K
  23. /**  r* Y. U# ~; c& E! \
  24. $arr1 = array(9 l% i% N( @& l( Z; R9 S
  25.      'a' => 'ttta',' h2 \& v. b, a* {
  26.      'b' => 'tttb'," c) c2 T) P: P7 K. k2 ]
  27.      'c' => array(
    $ \8 {6 G7 T6 D" k: [: T- t
  28.          'ca' => 'tes1',3 m% d7 _& ?( U
  29.          'cb' => 'tes2',
    $ _: S4 b: F& F7 a
  30.      ),* F4 K. @) f$ ]' y0 N- L
  31. );8 Z! A& w8 K% E+ s: Y3 y
  32.   *; N/ X" t1 R. {' R) e: ?
  33.   *
    9 a) A$ {7 A8 H; j
  34.   */
复制代码
9 x4 I6 U% g6 V6 V* R

1 T! Z7 g1 s( U' D! Z0 f+ @7 K6 A% m  p& o- o1 |$ z
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
+ c! ^& G, S9 j' b
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    * B" h: |/ l9 G

  2. # A1 v( m+ c: y+ N, ^) f  W
  3. $str = "test";
    % @2 k3 Q& y" T& I7 K9 L6 @9 I: W
  4. : B8 A0 E" C: W0 }& R) s- K
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    + Q- c3 G, H! [, ^# L/ D
  6. & S6 N/ U7 K! e" g8 b
  7. $arr = array(
    / \% p4 \5 N8 t0 f9 s5 \
  8.      'a' => 'what',, R! n3 y( v+ V( A
  9.      'b' => 'are',1 [' E% a8 C) v" t! K! q8 `! ]
  10.      'c' => array(
    # v: W! X4 n: \% g( F
  11.          'ca' => '11',8 ?7 U" l4 i8 }
  12.          'cb' => '22',
    : v7 J. [% w& Q3 ?. C! J
  13.      ),8 l1 Y: r( l7 U* R; o
  14. );
    6 Z' L' k! W/ K: H9 p* H
  15. 2 [; ?% C* g2 e8 c
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);
    + q9 I2 U; |* E! M( m) o) [
  17. /**! k  G. E, W2 }" e' s2 M, X
  18. $arr1 = array(# l4 V7 E3 S7 Q7 ?' I; V8 S4 w
  19.      'a' => 'okhat',
    % b* |, q: W; A# }0 I$ S- Z
  20.      'b' => 'okre',# S# p* r' W% d$ A3 ]4 B; J
  21.      'c' => 'okarry'$ Y  e; I7 m! e. J2 Q8 H( W
  22. );3 P2 F, E! v( f$ b4 T: w
  23.   */% H5 N0 q& m* k' D+ w5 ^6 o+ V
复制代码

! c2 M1 b( A0 E( v9 H' N
数组替换的时候,也是处理一维数组的字符串值。。
: H6 v8 n% r" N5 _% n5 h
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php# G( p- z: @/ U. _4 q3 h# O/ T

  2. 2 Z4 L: |& j" V% w& a
  3. $arr = array(! b2 ?  A  m, N/ U) F; `
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头) Q  V' o4 W4 k
  5.     'b' => 'XXX13188887777XXX',
    % E/ q% B4 B5 q, Q# _; [  L( }, @4 Z
  6.     'c' => 'XXXX918811113333XXXXX',4 j# F) k9 c6 m1 g( \# o
  7.     'd' => 'XXXX188111133331XXXXX',
    , p6 L; }2 }. S% d0 B2 e( D
  8. );; C8 Q  X9 n$ G- \! @& s, {

  9. 2 z: l: N; [7 m( _5 r5 z
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    9 L1 ?9 }9 _$ ]. t* [4 O$ u
  11. / a. H( V3 L- }, I- I+ q
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号0 r) c! J9 o0 M

  13. $ ~* P* G1 X, n8 \% N/ C
  14. /**6 F7 E. H+ u& |. V
  15. Array
    3 d+ r6 C" x4 D" @' K
  16. (, A' W. c$ q& T8 K' J8 C
  17. [a] => XXX25012349999XXX/ A0 P5 y5 T6 g
  18. [b] => XXX mobile:13188887777 XXX1 T% N% y5 x9 U% @) f7 i
  19. [c] => XXXX918811113333XXXXX
    ' \6 B' U+ N8 W
  20. [d] => XXXX188111133331XXXXX
    * H9 w* [# l8 g
  21. )5 u9 A! U$ {- ~3 h
  22. **/
复制代码

3 l" K& H; W  M% Z" B4 q' z4 f
; T6 t+ N5 p- s$ j* L( i1 U8 J# x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 20:41 , Processed in 0.055795 second(s), 21 queries .

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