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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
8 L' |+ @7 j: R, g8 X) b* m
strtr()的用法:
  1. <?php
    4 [1 @8 G  B) h. G$ f$ J5 p7 W
  2. % k4 S. b" }; ?
  3. $str = "test";
    % r$ h0 X4 C& s2 I* F/ p

  4. 9 \5 X; P: ^. Y6 A! G
  5. $str1 = strtr($str, 't', 'z'); // zesz
    ' P$ r( C1 d; K, I1 R! n
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1! i; S) l: C. E4 J/ H
  7. $str3 = strtr($str, 't', '');// test
    0 {9 A6 B) \$ i1 C. e
  8. $str4 = strtr($str, 'ts', '12');// 1e21: m( Y# y# C& [( Y7 c" O
  9. 1 s! ^. l/ j, L
  10. * U/ s9 `5 i6 v" f' I2 Z# [
  11. $str5 = strtr($str, array("t" => '')); // es
    . D4 }4 r1 i9 p* y2 k' y& h
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
6 Q8 N( Q$ w( N
  有两种传递参数的格式,一种是数组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
, |+ Q0 W3 L: l1 [7 S" V+ b
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    , ]; a8 n* |; F" k7 y3 i) r

  2. ) F; K6 M  ]2 X) N
  3. $str = "test";
    " O# s1 }  J% W  o, E

  4. & h. f/ ], d! o% y% m& }
  5. $str1 = str_replace('t', '', $str);// es
    ( V+ D6 S0 B  C( B
  6. $str2 = str_replace('es', 't', $str);// ttt
      j5 z; P' S, n: ]
  7. . n9 c+ J- Q5 c8 D& X6 k
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
      d% g4 y" g# L" ^* \5 z' Q2 G
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae9 h: `0 M/ `8 h8 M8 r; @; C
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa; ^, v. m2 F; F; F$ h5 J
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee9 K8 d, ?! L8 V1 M4 w& w

  12. , E9 c! b. S1 H2 K1 r5 o
  13. $arr = array(5 P% X3 k$ y9 g# X. \6 U
  14.      'a' => 'testa',! `; Z5 m7 Q) k" N
  15.      'b' => 'testb',' X: h+ H9 e2 O. S. p9 a1 ]0 a
  16.      'c' => array(9 m6 A  ]( i% Q$ u
  17.          'ca' => 'tes1',: f- u9 m- m2 Q  _1 W
  18.          'cb' => 'tes2',
    $ a4 k8 h9 j  j
  19.      ),
    % M4 v* P/ B+ T. ~; X0 h: ]
  20. );6 t: Q, p( G" A3 U! p
  21. 3 i. }5 ^7 A* V4 T
  22. $arr1 = str_replace('es', 't', $arr);
    ) J0 Y2 A" f0 M+ y( M
  23. /**
    . @0 G' O  \& D& F- }9 ~
  24. $arr1 = array(
    . e0 W! i+ @2 E* K- {, i
  25.      'a' => 'ttta',
    ; n2 t. c# ], g1 h/ q; t; k1 O
  26.      'b' => 'tttb',8 i9 _9 U! \8 R5 n8 B5 g. y
  27.      'c' => array(
    # S. ]5 G& q; m8 Y8 j* u6 r
  28.          'ca' => 'tes1',
    7 \. O$ |! G0 s! S' y, a, J
  29.          'cb' => 'tes2',
    $ ~' q, u/ A8 S5 J
  30.      ),. t6 O6 |& _- L  g* T( m! ~4 @
  31. );8 ~2 ?2 M( f0 X3 ]# w* c( L2 o  ^
  32.   *8 h1 ~! J* f% ?+ v2 V! I
  33.   *4 F" Y& j( U& R4 n
  34.   */
复制代码
5 m6 \! b+ s, y" y$ a  _+ p
4 H  n: [9 o% O" _) M

7 j/ j% W2 f3 t" U5 [
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。

, W* L4 w$ C* |- `$ Z
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php0 W, }* S* K3 s% Z+ O# k  q/ \2 \

  2. $ a: w2 h  Q& s( ^5 Z
  3. $str = "test";
    6 A$ K3 O5 {" D0 X' x" h

  4. + d! E/ k- d7 _) ?2 Z
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt9 {/ |$ T/ y! q) k* e0 z* ?

  6. - Q. ?% ^& R% j% k6 g1 U& f9 X
  7. $arr = array(
    ( R+ p! D( A6 m6 z2 d
  8.      'a' => 'what',, d: h2 N1 r8 F7 ?+ z2 o5 D- H6 m
  9.      'b' => 'are',1 I$ t/ T- e1 s3 H7 B3 s
  10.      'c' => array(" d1 B: C: b+ P, ]; _) q& h$ j3 V$ Q
  11.          'ca' => '11',
      q6 v% Y$ @$ i2 Z2 u
  12.          'cb' => '22',
    : l! g8 B4 w, u" i! r
  13.      ),4 j+ Q& l2 Y+ n" ^0 K6 H
  14. );  h5 Y3 K  K8 C+ r4 y0 _  w3 g' r2 n
  15. ) M( O8 x$ q' r" C2 E2 C
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);7 J2 @# o, `/ `! S" F
  17. /**
    2 K+ u% q! l! l& p( D3 A' t/ x
  18. $arr1 = array(7 \) e; w$ `4 D
  19.      'a' => 'okhat',; W- u) l1 r/ \
  20.      'b' => 'okre',9 q  @6 V+ I, e! }. F+ F" k
  21.      'c' => 'okarry'( ~: I! R: p, M. r0 ^7 s
  22. );) U2 m& m0 k. K9 ^6 T3 A/ L# s
  23.   */
    / V, R4 X! j/ \. t5 S9 u: o" u
复制代码
. u9 A, l) r& D& p% i
数组替换的时候,也是处理一维数组的字符串值。。
4 }. C. V! l* y
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php; C& i. E6 a# q, Y8 n% A- q
  2. 2 X; b9 s, l3 S4 B
  3. $arr = array(6 ~0 Q2 x' Y& w+ f0 H
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    ; r- e% ]9 ^5 a& p, U
  5.     'b' => 'XXX13188887777XXX',+ u. l; O; l1 g4 a
  6.     'c' => 'XXXX918811113333XXXXX',: K) e* g4 r- B2 L9 l
  7.     'd' => 'XXXX188111133331XXXXX',
    2 a  d9 m- K4 [- C* o) M8 @
  8. );
    , ^: E- h) F& j0 P1 N

  9. 1 [3 g+ _7 J4 m# t/ @; M7 N
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    . u2 u+ d) Z& }2 s3 I( E) v

  11. # r6 Z2 M+ p* D% z2 E( v: P
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
      U  p1 w9 q" C7 ]* m0 g
  13. * S9 N/ R' E* X3 S% D. e: x. |* [) F
  14. /**
    3 R4 j( W0 p/ e4 L) ^" K
  15. Array
    5 N# X% l0 @: ]! C" [$ Z: T5 a
  16. (
    7 q8 N  o0 Q/ N7 O1 _$ }7 J
  17. [a] => XXX25012349999XXX
    1 Q- X$ M1 {4 j( a. ]
  18. [b] => XXX mobile:13188887777 XXX
    * K9 Y: y; w. S( J5 l6 M) l9 U
  19. [c] => XXXX918811113333XXXXX8 U5 a+ w) ^  s0 e
  20. [d] => XXXX188111133331XXXXX: j- y# ~2 ^% m! E4 ^, F7 c
  21. )
    0 [1 C5 P  l  ~9 x2 \
  22. **/
复制代码
' C* j; G* q. a( f2 a' N5 s
' k, E6 S6 f& C- T3 O
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 08:08 , Processed in 0.059605 second(s), 21 queries .

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