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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

. e7 I1 C* N# s: @' z
strtr()的用法:
  1. <?php
    5 r4 e% |" `7 ?2 w4 l7 `/ Y9 P5 `

  2. . a/ ~) i3 f) o+ T( Y
  3. $str = "test";* R( q. X: j7 L7 {  `9 R) ]

  4. 5 P( D( d0 L; @: o
  5. $str1 = strtr($str, 't', 'z'); // zesz7 c3 \3 U9 N+ P4 L4 N, y3 u
  6. $str2 = strtr($str, 'tt', 'z1');// 1es18 M# e+ b+ a$ G! ~) n8 A3 ~
  7. $str3 = strtr($str, 't', '');// test
    ; \! l+ U9 ~( Q9 n& Q+ Y9 L
  8. $str4 = strtr($str, 'ts', '12');// 1e21- I# v+ Y4 r+ p: B# l

  9. $ ~: Q: W/ t/ i

  10. + B3 M( `5 X$ y8 }" H* l
  11. $str5 = strtr($str, array("t" => '')); // es4 a% S& y. b6 e( a/ M  c! |
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

8 U4 [$ ^8 \1 j3 C8 r8 c
  有两种传递参数的格式,一种是数组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

5 g) T8 n3 C$ j+ o
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    1 D2 P4 f/ C. r8 B
  2.   k" x% b) |0 s. p. |1 L1 B
  3. $str = "test";
    + w2 f0 W0 L9 _- J* E) d

  4. 3 M3 S3 N$ I, e& M. u) {% S! q
  5. $str1 = str_replace('t', '', $str);// es, b3 h' T( G# i+ J. j
  6. $str2 = str_replace('es', 't', $str);// ttt
    " I, c$ s: I2 r/ j9 s# J' Q) @
  7. 4 ^% O# U" A  ~4 _4 ]& }% T
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb" n1 ^# E2 p; s8 G7 r" G
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae: Z( j' G) R2 O. K* x. ?9 N
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
    9 z' I* i. W1 f! P% w" t
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    + Y" r% v! q" s1 M: I" `( p, _- ~: Z

  12. 3 S" W# b# ~* g, [1 W
  13. $arr = array(: }# P/ h3 L% D' _4 G" w
  14.      'a' => 'testa',
    ) a, y# n3 [  z( d6 l' T
  15.      'b' => 'testb',
    % ~5 N$ z/ T5 o/ V4 `8 h
  16.      'c' => array(2 e- N% _. p! {1 a- B
  17.          'ca' => 'tes1',  x3 G- T5 e$ h$ e
  18.          'cb' => 'tes2',
    , \0 ~" A7 q& ~6 U" N0 D. {
  19.      ),! ?, o8 `# b6 P/ n5 s; I" I
  20. );: s' t# D. n) h2 I" ~. z
  21. - C4 L, t! t4 U, b0 f
  22. $arr1 = str_replace('es', 't', $arr);
    % h% S- G. A0 o& V2 u" b
  23. /**
    $ @# x' N1 B1 M% G6 p
  24. $arr1 = array(
    + @! S, u/ W2 g! g
  25.      'a' => 'ttta',- a0 m; q1 h  x/ ]; y* W
  26.      'b' => 'tttb',
    ! h/ T: I. \9 u" P! I. B  i
  27.      'c' => array(
    3 D, X; i4 `' l% _( ]
  28.          'ca' => 'tes1',+ v0 \4 T6 [* E# C" r$ J
  29.          'cb' => 'tes2',
    * Z! }: a+ N6 P8 F) x
  30.      ),! n4 V; U& d! D* }) F; b! Z) H9 H7 ~
  31. );- b/ d( k, X% O3 s3 S) k* W& o; s
  32.   *- {5 Y" v5 q0 c+ N  @
  33.   *- L' K; o9 _4 ]! d
  34.   */
复制代码

7 s3 d8 s7 H  T. f7 ~" K0 f6 S) y$ O1 o& `8 y

8 F. X5 X! }/ m$ ?
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
# v- m& ^4 Q3 Q: ^4 u$ z
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    ( j0 I% \: W* P, J# u9 ~

  2. 5 ?3 i! }3 p6 y* C
  3. $str = "test";5 n$ P- n5 h: p, e

  4. ! d" X6 E, |7 P; M. J/ f' G9 j: U9 b5 H5 {
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt  a; h' V3 _, l( m# u
  6. + j, U# G3 X  I' m
  7. $arr = array(# @4 [9 [' T' F% b4 _0 p) [3 A" L
  8.      'a' => 'what',
    " M  Y# ?( `1 \; `$ r" m8 h6 W
  9.      'b' => 'are',
    7 k1 D. H, Z  b9 r1 s
  10.      'c' => array($ @7 Y3 l; f7 ~. q" l/ |3 B$ s
  11.          'ca' => '11',1 X2 V$ \. ^: e+ o5 b
  12.          'cb' => '22',
    " W$ P( _& v: S+ Z  I
  13.      ),
    % \: i$ T7 A! [* A, c
  14. );# S" @, a5 v' Y5 x8 R& G5 G
  15. 0 n: I8 d8 D% X0 Y9 c2 P% z- h
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);1 w( S+ _* ?1 }% u- L. D0 U
  17. /**
    ; n8 d1 @5 j, T9 h
  18. $arr1 = array($ Y* A- B/ M/ t
  19.      'a' => 'okhat',
    , a  f( k3 e  A: t9 _! e
  20.      'b' => 'okre',+ a" t& B1 i, n
  21.      'c' => 'okarry'/ c1 ~6 |" R8 ]* i4 @$ ~( a( v  g
  22. );
      _9 I+ K7 U8 z! w2 m- G
  23.   */* j+ P2 \% ?4 s9 W2 B$ k# ]
复制代码
" L( F0 j& y2 {. x) f5 |) F
数组替换的时候,也是处理一维数组的字符串值。。

$ M7 t$ f: }% i' H
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
    9 R% b2 i1 l) d+ D3 f9 Y( u; p
  2. : |& A3 g# I% \. D$ G" e
  3. $arr = array(* o; _1 s3 ^, d8 d$ A
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头+ w  O& Y  U8 X2 |
  5.     'b' => 'XXX13188887777XXX',
    8 v( \3 D4 ]2 p+ H1 n
  6.     'c' => 'XXXX918811113333XXXXX',; i/ `7 E1 e+ ?
  7.     'd' => 'XXXX188111133331XXXXX',
    0 U1 Z; U; k3 P7 G0 [& K% C
  8. );
    : H! L' U7 Z: l+ h
  9. 3 G3 v. t. K* E  i! X) {
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    ! F; G; A( C, I1 q* k3 D
  11. ' q% m/ ^- i7 m9 [3 x
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
    . k' ^! S! h4 t

  13. / c7 i9 T2 B1 w/ Q9 `
  14. /**2 C) ^! G7 D& L6 A1 b, i$ P) S7 z
  15. Array
    " X' R6 h* m! J2 M
  16. (
      }' K# R& g9 O+ o) G; ?6 i
  17. [a] => XXX25012349999XXX+ U5 q% @: U* |+ O2 d
  18. [b] => XXX mobile:13188887777 XXX
    ; q. H4 x+ h- q8 d7 `/ r$ y
  19. [c] => XXXX918811113333XXXXX
    & U0 C2 s" m6 Z- |9 D
  20. [d] => XXXX188111133331XXXXX
      m0 A8 e" R3 x8 v* A; I
  21. )
    / Y, K$ h7 K9 M
  22. **/
复制代码
$ a9 M6 {5 W1 \0 z4 g0 |
9 `, ?1 Y2 j! l0 w8 l1 {
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-8 08:58 , Processed in 0.179299 second(s), 21 queries .

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