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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

! Z$ e4 L; r. ^/ W6 }+ t3 J
strtr()的用法:
  1. <?php4 s/ L1 \4 `1 K/ G
  2. ; _5 l2 U/ M! e/ y  C
  3. $str = "test";
    ; P  z7 G5 J# K* w

  4. & W1 N# J$ O8 l( }# @9 ?
  5. $str1 = strtr($str, 't', 'z'); // zesz+ f7 _) y, A; L' W( m) C; i
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    7 P9 g" b; F( Y/ J* Z! a! ^$ {# H
  7. $str3 = strtr($str, 't', '');// test
    ) |1 d' l, n: e  M+ x
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    ; Q' c) C. X$ E& n3 t: i" a

  9. 7 Z: m1 N5 [$ ]* e- C: h
  10. 4 H% Q% o; C) r* K
  11. $str5 = strtr($str, array("t" => '')); // es
    # B: P/ u# \  X% g& x
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
8 ^# v$ \0 j" K" {
  有两种传递参数的格式,一种是数组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 t* V; @% a3 ~6 ^; N: ~  Q# ^+ K
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    & o- }# V/ ^7 q5 ]  x  k
  2. / f/ b9 t1 x5 i0 c* p8 [
  3. $str = "test";$ H2 s9 F" ?1 a% E- p5 }
  4. 0 f$ k6 b& g; ]+ b4 b' Q
  5. $str1 = str_replace('t', '', $str);// es
    1 k* g! P5 X0 j4 Q. \
  6. $str2 = str_replace('es', 't', $str);// ttt
    1 C9 B6 @9 i0 o0 p

  7. 1 g9 L( U' g" T' l6 C1 y
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    / F/ c0 b7 D4 O  U
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    ; P# l6 A% `9 d
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa- P' [, j6 Z7 g: h* r
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee' q  X; M0 I7 T  N& t* f2 B

  12. . {  r* l1 {$ j6 q" o
  13. $arr = array() J- o  r0 u) U" M) g
  14.      'a' => 'testa',* E5 q$ V+ J! t
  15.      'b' => 'testb',
    7 i3 k8 M+ G+ g1 X+ R/ s! [$ s
  16.      'c' => array(8 f: Z" p: I8 N- G# k8 F; k
  17.          'ca' => 'tes1',
    : @( }  J: B/ E# R; Q+ H
  18.          'cb' => 'tes2',
    ; \: C# Y7 V7 L
  19.      ),
    # t7 S7 v$ z5 b( m7 _8 {
  20. );
    - Y8 J6 t" W1 A2 L, Q

  21. " d. ]5 T6 z3 l  D+ i
  22. $arr1 = str_replace('es', 't', $arr);3 M4 g! o! Y  p- j5 d
  23. /**
    . _. i( B, t+ M% k1 V
  24. $arr1 = array(" }0 \& G" i& o) T) O5 o
  25.      'a' => 'ttta',/ }# w: U6 S! `6 r+ S- M
  26.      'b' => 'tttb',
    0 t7 M& _/ v8 O# f& F
  27.      'c' => array(
    " P2 H( F  ~0 P0 f
  28.          'ca' => 'tes1',
    & @, w9 T9 X7 b: q- w
  29.          'cb' => 'tes2',1 u8 U  @' b* m( A% f' M7 u! p
  30.      ),! K& x3 m/ l5 C# E$ Q
  31. );
    7 ]) Q4 y7 P9 [& U( n' ^1 l
  32.   *1 d% y3 u" j( B) C4 @& N
  33.   */ t% ?9 X- M% _  p& g
  34.   */
复制代码

' F4 U3 r) b3 d+ q3 q, |' t8 ^7 M
- i" ]8 u0 |! J( p! I& r* p% |; l- n0 H8 E6 R
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。

; ?7 D2 Y/ h6 d
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    1 _' e# u& f. X3 n7 V

  2. 9 d  {& D% k! ~; u- R
  3. $str = "test";
    : \9 E9 c# a$ A) Q$ g
  4. 0 s: u! q) W1 N5 h
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    3 ^, ?% Q6 c7 i* Q! k
  6. % N$ Z' S8 U1 u3 }: f
  7. $arr = array(
    9 H* m9 S7 F. p. K' W/ t2 R( d) R5 D
  8.      'a' => 'what',; V0 c" g. `, j# t7 P* x9 U- U2 x
  9.      'b' => 'are',# X$ p+ E# v  ~' W% c- B" I# s
  10.      'c' => array(
    . \2 ?% h, s( L' c" ~
  11.          'ca' => '11',
    2 F( Q& T  u% }3 k6 {6 |: i
  12.          'cb' => '22',/ T) _1 w) c  c) x' x
  13.      ),/ p, G' l/ v& q' G; Z% y0 i
  14. );' K) m- Q8 B. f! z# b( {

  15. : B8 J) D) m- N* W
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);2 t9 J5 U* v+ a9 ~  N% w5 i
  17. /**' S( F  U) K+ e# z0 L
  18. $arr1 = array(. t6 I- K! Z% j; i5 R! [
  19.      'a' => 'okhat',
    3 i* m! ?0 A4 Q, u. c
  20.      'b' => 'okre',7 A0 c- L( `' a+ }6 [/ _& ?
  21.      'c' => 'okarry'
    4 O1 k" U9 k1 l* Y
  22. );
    - G) ]& h2 a9 l( R2 b$ V
  23.   */
    / a5 }0 [6 C7 o) Z% O! y
复制代码

% |  B) |& v, F! ^. D
数组替换的时候,也是处理一维数组的字符串值。。
& ~5 C" @) x/ z+ ?
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php0 X& a1 W* m% {8 R7 k, y
  2. : ^1 m/ {) `" Y
  3. $arr = array(
    ; r6 ~4 K/ Z5 |
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头5 P% i; E! T$ f* \# F
  5.     'b' => 'XXX13188887777XXX',, [0 }/ E" h( G8 b* s$ n
  6.     'c' => 'XXXX918811113333XXXXX',2 d4 r  N! v; X4 P" _; u6 h, z
  7.     'd' => 'XXXX188111133331XXXXX',
    / a( g, h7 o& c9 r9 O
  8. );
    / B# b4 g1 b# [  {
  9. " P! x7 a* p1 R$ _
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    # p9 n! _5 `6 j+ o4 F5 W1 ^! V9 ?$ d

  11. $ t, h9 i- c8 q
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
    . S" b) z3 w% {. O& I4 F) {+ |

  13. 6 N* ?' A' q5 K! [6 i9 t
  14. /**9 I* S& L" O3 z7 E8 U) ^% a
  15. Array
    8 g% n! b1 m/ p# d% e5 \
  16. (
    / S2 j4 m% O/ _( V! C2 ]: m
  17. [a] => XXX25012349999XXX2 W4 P2 T$ Y; A: p4 s
  18. [b] => XXX mobile:13188887777 XXX
    $ O8 v7 n) Q7 D0 F% R* ~
  19. [c] => XXXX918811113333XXXXX
    ' l# U5 k; I. L, A1 S& n
  20. [d] => XXXX188111133331XXXXX1 @4 o' W6 v% F- Z, }3 d: \
  21. )
      e+ T, i) v- f% ]% @4 G0 `) Q( v
  22. **/
复制代码
8 Q  {" A) M# z: _% }  T2 E4 P0 z
1 R2 m- ~' _' R- N- Y" ]; ?! e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-17 11:13 , Processed in 0.120933 second(s), 19 queries .

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