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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
. ?$ \/ n8 Z8 w# m3 h- e' s; ?
strtr()的用法:
  1. <?php, b4 y: a$ b, V

  2. " Q) O% y7 M5 e; x! U. \
  3. $str = "test";. K5 k4 \5 N, t) b3 H

  4. 4 b! w; @8 r6 w9 Z, t5 R( U
  5. $str1 = strtr($str, 't', 'z'); // zesz
    & G) f$ t% N7 P$ W
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    : _$ D6 j4 Q0 F2 V7 @
  7. $str3 = strtr($str, 't', '');// test5 x! Q! r' c# g/ K
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    0 M2 a& d( u# Q( H

  9. % w$ |8 V* o* m! [8 m) ~  ?

  10. , P8 \! O- Z: w
  11. $str5 = strtr($str, array("t" => '')); // es% K# m2 w2 T5 L/ ~/ o3 N1 A+ }8 U
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
+ o$ n$ b; W  d7 N1 a, s
  有两种传递参数的格式,一种是数组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

! R1 e- J, D/ ~
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    7 }- u6 w8 @; r" T* ]$ m2 P  g2 i

  2. 3 e! S" ]. ~* \0 H- z. H
  3. $str = "test";
    + l! B6 v6 c7 Z) h) |9 W6 H
  4. 7 F6 S$ m( X0 D1 K: M$ x8 r
  5. $str1 = str_replace('t', '', $str);// es& j# H) `7 G/ [( J
  6. $str2 = str_replace('es', 't', $str);// ttt' X+ q( S* O+ I% ?8 [/ @

  7. , a  m& I  x& ^6 o- P1 v
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    . t, a0 l) P! E5 z0 }
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    6 I' a! t+ @* R: P6 X" M4 @) f
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa; t: r; Y2 C/ N5 s" C
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee9 {9 L3 u. ?. u9 D2 f6 |2 Z
  12. 6 ]0 K- w5 K) k. V6 h
  13. $arr = array(8 G% w0 y( p  c# }$ U! x, B6 T8 {
  14.      'a' => 'testa',
    7 ~4 e/ Q) K, ]. \
  15.      'b' => 'testb',
      P/ V" J( G/ z
  16.      'c' => array(, i+ k7 p5 G+ b4 I
  17.          'ca' => 'tes1',  S7 B- ]/ m3 x" Y/ C
  18.          'cb' => 'tes2',
    * B- T' j. s3 e2 S5 ~
  19.      ),
      d) O+ e) H( U8 o; B
  20. );! A7 u% ^  @+ E7 F) j9 r
  21. # o4 v8 j# @, ?) W
  22. $arr1 = str_replace('es', 't', $arr);) i2 M/ p; u$ Z0 U6 I
  23. /**4 Q& G" x$ E5 u! l5 j
  24. $arr1 = array(, E# T! m/ D7 [5 I$ k
  25.      'a' => 'ttta',* |% K% T- b; u2 ?
  26.      'b' => 'tttb',2 d. B5 M7 b; q( S4 |
  27.      'c' => array(
    ; q# R6 M( A$ {; j6 F! V5 a9 h4 V. G
  28.          'ca' => 'tes1',4 v) b! U( P8 v& H/ @& t
  29.          'cb' => 'tes2',
    : b4 C2 {; L; u0 Q! u2 H9 M! j
  30.      ),
    5 d9 w6 Q  b; b! L( q
  31. );
    ( R# K- F. v7 I' n+ ~
  32.   *! ]+ Q6 n2 l4 J' ?; l' k+ h6 B
  33.   *- d5 r3 x' }" t. z5 X5 q
  34.   */
复制代码

1 A. ~$ i1 L4 q
  p8 A, M# @8 |0 `- I3 b% J4 I/ t$ C% g0 }! y$ y* \
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
% T/ v7 }+ f: ?* k$ G
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    $ f& n3 z+ ~8 e2 f3 {& \* A2 [" G
  2. ; E/ a, `5 ]$ z9 c. p2 Q: a. X0 ?
  3. $str = "test";3 S; E: A  `3 J* N
  4. : ?' [2 B  X, P( F: ~
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt$ o" d! S, L' E) a2 |! r3 `0 G
  6.   ~0 v6 ?& O: ~& D% Y: f6 R
  7. $arr = array(( @! p/ _& r- f- K8 [7 x
  8.      'a' => 'what',( Y. M' ?0 ?, j, c  b+ W1 d+ S) ]
  9.      'b' => 'are',
    6 u! o# m# e& [1 ~# Z; u" m1 f& P
  10.      'c' => array(
    2 T$ z) h* D' h* U
  11.          'ca' => '11',# H" N8 I0 m# z* a8 g
  12.          'cb' => '22',
    ' v' i, u5 L$ D& w
  13.      ),
      [/ l- G1 E+ @) ^2 g- l& R
  14. );
    9 y( U% ~$ ~: m# R/ p' \7 N) |/ x

  15. 2 J7 r: m5 b' U4 {& V- j- t. {
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);" s; U  g5 r/ u  ~
  17. /**& u: s) P$ B* [  n  a
  18. $arr1 = array(
    7 _( }9 ?) L5 U! ], q+ O0 g
  19.      'a' => 'okhat',
    3 s. U9 ?4 p6 ~/ Z  O% I
  20.      'b' => 'okre',
    - Z6 }. r+ L5 f- l2 w7 g- A
  21.      'c' => 'okarry'9 _- y+ D- T8 L- b: O: S# `
  22. );. {# ~! {' R7 _9 Y8 c) K
  23.   */; n, q: ^: j: {! [" @
复制代码

3 F; C' C% Q) F% {! x+ M0 J
数组替换的时候,也是处理一维数组的字符串值。。
3 T; ^" S) S6 r# B0 y
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php  c; F/ |- q  T# j# o; C5 Q1 Z

  2. ( T$ ~3 j: z$ z( }+ u4 K
  3. $arr = array(7 [# c! \) y- `2 s# ?" l
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    ! l/ S( m( d5 r
  5.     'b' => 'XXX13188887777XXX',+ {0 O' A% _8 M+ c. Q
  6.     'c' => 'XXXX918811113333XXXXX',
    9 v2 Y; S4 ?9 U$ E
  7.     'd' => 'XXXX188111133331XXXXX',
    3 T6 p) |% L+ ^: w) J9 G
  8. );! w2 P" ?) [) o) z
  9. , K: r" J+ W# w9 Q( W: g
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3" z( p# z; S8 B) S" H
  11. . _4 H8 j5 Z8 B
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
    # I) f5 S* g  J

  13. , @" b: |* B; ]+ T) ]
  14. /**
    % N3 S0 C' P  |2 C; p: m
  15. Array* U! [2 ?2 w' U% @( s9 f
  16. (1 i1 a6 f% J) Y* A/ M+ P
  17. [a] => XXX25012349999XXX' V7 o* E/ j4 S5 e9 T) o
  18. [b] => XXX mobile:13188887777 XXX
    & u9 g& W- _% r
  19. [c] => XXXX918811113333XXXXX
    0 y2 ^5 S8 B6 i$ E; L: N8 a
  20. [d] => XXXX188111133331XXXXX7 M$ b, ]% V% B0 Q& D/ x% S
  21. ), i; A$ w3 Z  T, b1 |. Z+ V4 q
  22. **/
复制代码

/ P+ f: y3 y! C7 k" n7 J2 A& B+ A% d) F. }* o% I( `) K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 10:53 , Processed in 0.073147 second(s), 19 queries .

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