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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

# K* u  b9 P/ n3 ~2 i
strtr()的用法:
  1. <?php/ Z" g$ S' p9 L1 t( b' a

  2. 0 y2 R; g; v) `7 h. w  m: P" s
  3. $str = "test";+ ^' G" D6 B' `! n! R

  4. 4 i$ b" Z& F. N% c# W- \9 a; V; H
  5. $str1 = strtr($str, 't', 'z'); // zesz) v9 `2 y2 n( u5 d
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    7 D  r2 H% o% ^- u2 A
  7. $str3 = strtr($str, 't', '');// test
    6 b! d7 y- E3 V4 m, r
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    7 F3 a2 ?( V/ e  Z% C. z" s$ q

  9. & Z" k2 _- x1 b* s3 M

  10. 3 X6 ^4 A  v+ w# t
  11. $str5 = strtr($str, array("t" => '')); // es6 h* M/ S% T0 K
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

- ^3 k% X! A7 f6 Y5 q; X0 q
  有两种传递参数的格式,一种是数组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
, c% m* l* g* L% J
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php3 M- M, s, F  r5 f
  2. 4 X  x' q# Y' p. r6 N. A- ]# z
  3. $str = "test";4 @, S( O: @6 d

  4. 1 g  V3 y1 n8 t7 v  O1 T* }
  5. $str1 = str_replace('t', '', $str);// es
    7 X" c  {6 Q* L* b
  6. $str2 = str_replace('es', 't', $str);// ttt* N- x; d/ r; a3 M! i' K. v

  7. 3 S( b- V9 N4 P% D) C
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb& I7 z3 E& a( D
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae5 d6 E; T% Y+ d: b. a
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
    9 v* o6 y$ L4 ~6 z
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    $ X$ `2 \8 _! S) Q% _

  12. $ }$ T- `1 }5 m: [, a& d2 O) r
  13. $arr = array(
    5 z9 \6 [/ F/ O. w) L1 ^* n
  14.      'a' => 'testa',
    + q" i( [( Q/ e. d* ?) j7 ]( m
  15.      'b' => 'testb',  U7 B$ F* l- O/ [; c
  16.      'c' => array(7 i& \, j7 ~+ J* p$ N7 Z( h: X
  17.          'ca' => 'tes1',$ j8 C% r; n0 L9 k" J# l, B% ~
  18.          'cb' => 'tes2',
    0 ^$ h  O) l9 X9 |. H8 z, A3 a
  19.      ),& }- z3 I0 x5 X# f5 q! d" S) }
  20. );( ^" E% @3 [: @& Z1 _
  21. 7 c2 z/ {5 x$ W
  22. $arr1 = str_replace('es', 't', $arr);
    , R% ^9 F$ C$ m& l2 b
  23. /**0 q& I: K8 T. ?! K
  24. $arr1 = array(
    5 ~" K' Z  r1 H: ^: v
  25.      'a' => 'ttta',% ^" [8 d" N0 `9 z. `' l
  26.      'b' => 'tttb',9 U) w5 i; q0 A& ~
  27.      'c' => array(
    & ^7 J+ ^# {2 B8 L4 e5 n& c( c
  28.          'ca' => 'tes1',
    * D- T6 Z/ {5 G; m
  29.          'cb' => 'tes2',/ L7 a$ ^, S- N: I. @& X6 I
  30.      ),
    & C; K( P. @# O' K; O/ {
  31. );. ^/ o2 d# p  i" x. q# H; n8 l# N
  32.   *& T: A8 Z7 ]" [/ }4 U; J: p1 L
  33.   */ g+ v  u3 ]# g7 Z
  34.   */
复制代码
1 j/ m. r2 [* U5 ]

3 O* F8 G% c! M8 {1 Z/ k6 s7 E  z1 `8 d5 ^9 G* [2 L! l- H' _
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
# o/ z5 J2 x' ~; z. _) P! r5 H5 r
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    & y7 ~3 _3 R# @5 O5 Z8 M
  2. 0 c; [: }: |: e
  3. $str = "test";' W# D+ |7 F8 l' D4 }' a1 j- v
  4. ! y# l6 G9 A7 y
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    * m9 w1 i8 h7 d0 C8 j

  6. $ V+ h  q; o0 y% ?5 B* s) P( K/ r
  7. $arr = array(
    5 u1 S+ ~  \) V/ j0 Z
  8.      'a' => 'what',% W$ }5 q3 j0 v3 k9 c/ n
  9.      'b' => 'are',
    5 M1 f- z4 W" K" A4 V$ {' c/ r
  10.      'c' => array(
    : o- H. H2 X  T% |/ a
  11.          'ca' => '11',* n1 l& u& ~: d+ c7 r3 G
  12.          'cb' => '22',
    ' M* F, u/ v0 I0 `8 B5 B2 M  h
  13.      ),2 S  k) R! m& M3 r; `/ c! C
  14. );
    # Y: U" r2 V: O- P

  15. 6 N, h8 i# q3 J
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);. R! u5 l1 n' b1 O4 w, u7 v
  17. /*** x5 @3 h5 ^0 s: l( z( z' ]
  18. $arr1 = array(
    2 \5 m( S& y  c- l( |7 C$ x
  19.      'a' => 'okhat',2 z* ]' s2 {3 c
  20.      'b' => 'okre',- Z% J- C1 y, g+ d7 i. V& I  g$ X7 T
  21.      'c' => 'okarry'
    . Y6 g' R" H3 e
  22. );2 o$ @- ]* H( y8 Y; C* y+ I5 b. [
  23.   */( T4 Y; M7 q# N( _- A/ x
复制代码

  v8 o' }3 x& f' A, ]$ Y
数组替换的时候,也是处理一维数组的字符串值。。
+ f, V& E; e! E  Z7 R& w
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php* k( S) X" k. ]  T' a  {
  2. 2 {1 i6 q* e3 k6 O9 T& M7 c- y
  3. $arr = array(0 [% G! e. t) N/ G
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    5 W4 l% j5 R4 k/ |; z# f$ x/ K
  5.     'b' => 'XXX13188887777XXX',
    5 e% [1 p) z+ _+ A) J; N
  6.     'c' => 'XXXX918811113333XXXXX',. u. R& M# G" o4 u4 z1 v# p
  7.     'd' => 'XXXX188111133331XXXXX',
    ) l; o# t4 e$ {
  8. );
    # m4 k1 B) E& V6 d6 }5 v. e/ a

  9. ; y% Q0 X' `7 `: q
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3) C3 m/ Z3 L( s9 ?7 W
  11. , r+ O$ q5 @( V4 q' V0 q
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号0 K# B+ U+ h" w+ q! R5 ?0 }2 `+ V& I
  13. $ u# Z. x' O/ C! v/ P$ _5 x6 _
  14. /**
    ) ^2 v; x0 ]. E$ p
  15. Array* s, `; u  g5 G3 a7 g) s- t" C4 o
  16. (
    - @- u  G9 X" x( z+ \5 ~. C8 R
  17. [a] => XXX25012349999XXX1 t1 H, y6 n; e5 u
  18. [b] => XXX mobile:13188887777 XXX9 X, x( f) r$ L1 Z, d/ M
  19. [c] => XXXX918811113333XXXXX" R2 X# I, Q. y$ ~  s1 W- o" j: m
  20. [d] => XXXX188111133331XXXXX5 R1 u* a5 d( O/ o+ w$ V# a
  21. )0 X) k1 L, N/ k, R3 R
  22. **/
复制代码

- i' k' [6 }$ u+ J! P% @7 `" h
2 o6 K$ w! S4 `; G, z3 }5 W2 c$ U: g0 X
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 11:48 , Processed in 0.064308 second(s), 20 queries .

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