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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

3 V- u# O+ H, ~0 U) N  z
strtr()的用法:
  1. <?php; e# S% F' ~. }$ @3 A/ l6 f
  2. . b# m, B/ T6 P3 y4 ~! ^5 W
  3. $str = "test";
    ( R' E, T3 [$ F4 S( W4 p2 l( p
  4. & S5 Y+ S* N2 g3 o
  5. $str1 = strtr($str, 't', 'z'); // zesz
    & ^6 m/ t8 h5 Q& Y& X/ f
  6. $str2 = strtr($str, 'tt', 'z1');// 1es17 e( |; \# D: V: y) ~0 l
  7. $str3 = strtr($str, 't', '');// test: r; G% }) E0 k+ o# E) y
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    4 x0 Y& W- W3 D  Z5 Z
  9. & X. f% x- ?; `
  10. 6 X% Q0 D# P5 }( g: v
  11. $str5 = strtr($str, array("t" => '')); // es. t$ I& ?) X" n
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

- E0 v& y4 S: U4 Q  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

* _& Q+ F! C  e
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    ! [  P! C0 K7 R7 w  I4 ^

  2. ) ~4 i! P6 D6 B
  3. $str = "test";. M. j2 e5 V2 Q: d0 s! @

  4. " j, N2 m8 X  ~6 h# `: N
  5. $str1 = str_replace('t', '', $str);// es& U9 f/ T+ L5 G- X
  6. $str2 = str_replace('es', 't', $str);// ttt7 s& D- F0 d. f! ~
  7. ; \" I3 h, {9 s3 G
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb, @. Y: _, E+ P: d2 \5 x8 z( }# g
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae7 @, N' m# l3 z6 m6 w2 `: H
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
    0 k) Z9 w; K$ w0 ~# P5 R: c' b/ ]0 S
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    ' P. x* @( }2 O; o
  12. 9 ?$ n1 a5 H% ^/ W9 l" d
  13. $arr = array(
    6 B, ^- C, d  }9 I- P' P) c0 A3 _
  14.      'a' => 'testa',
    ) {2 Y/ w* c: j1 h- C  C6 y5 @$ h
  15.      'b' => 'testb',
    : `" J" M: e7 K. {0 N
  16.      'c' => array(
    6 p. _/ K9 A0 g; s' w* c3 h
  17.          'ca' => 'tes1',8 R/ _. [4 s( c) A% V
  18.          'cb' => 'tes2',. g+ h6 K% I7 b" w0 \
  19.      ),1 V& b6 q, K6 J5 m
  20. );2 s0 w5 Z5 M: x% K1 b( ^3 b

  21. 6 T% X( s; L$ v9 w$ {/ O
  22. $arr1 = str_replace('es', 't', $arr);3 i; O+ }: j0 L9 T8 i
  23. /**1 ~" ?" s6 j8 w
  24. $arr1 = array(
    " S, T% e, n) ?5 A
  25.      'a' => 'ttta',# S  T) m% V' [* x( a. l+ K- V
  26.      'b' => 'tttb',
    / l& m( k9 \+ W
  27.      'c' => array(% m- @+ P9 j# S& a
  28.          'ca' => 'tes1',
    2 C" F; {  Y, t$ G' Q* ], f
  29.          'cb' => 'tes2',
    7 O( x" s, o. e6 q8 \- T2 s
  30.      ),# d! C) C9 x6 E. y3 S
  31. );8 o9 d% l# D- x& O1 S: I
  32.   *0 U& _0 I- J2 k
  33.   *1 z% N* R$ z, J9 J$ R  H
  34.   */
复制代码

# D5 p; Q+ E5 ^) j- s& A% c. \3 R! L7 ?* \1 n
. z' S- B' J5 Z: T) e
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
0 \. a/ Y2 p/ N) J* A+ f
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    8 w& H: {/ d+ ?( Q! f; R; ]/ m* |

  2. ; e0 K/ l( Q# G6 ^7 J/ S7 K
  3. $str = "test";
    " ]) D9 w6 O: l4 h

  4. 0 k: A  X$ s2 f5 \# A+ Z
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt# \. k/ {6 U+ d6 M2 h" ^4 ]
  6. + h5 r( p. T9 G1 R$ R
  7. $arr = array(
    : L, ?6 o' ~1 l2 A. x0 M4 q: J( l
  8.      'a' => 'what',# Z' N/ e* n. h2 i8 R
  9.      'b' => 'are',' m  C) N' ?: _: e- a
  10.      'c' => array(& h5 I% A' p7 q- a2 _) [: f) Q. z' V+ B
  11.          'ca' => '11',, ?/ G/ Q, S. J8 D
  12.          'cb' => '22',) n4 z* V& v+ b5 @; l" O
  13.      ),
    . v6 j! y2 c, q9 X  c! }* r
  14. );
    " r% u8 `& k( `

  15. 3 U7 R+ n  I4 F6 T9 `5 m$ Z
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);  W" }5 E: e- L# q! S( h
  17. /**
    ; s1 }& L6 E, F( ?
  18. $arr1 = array(3 o, t; O+ l; [# s" }' v3 x. s* s
  19.      'a' => 'okhat',
    + k; m7 ^3 y! C5 [0 j6 r5 [
  20.      'b' => 'okre',& J( O) T; y7 |% [( ]% d3 o  T1 k) ]
  21.      'c' => 'okarry'- I3 E9 P. p. n  L$ i0 P  N
  22. );
    ' b3 L2 g& _0 p0 g
  23.   */$ Z4 U, B% y0 ^  F" T1 g
复制代码
- O' o- u9 H' W8 k8 d& g
数组替换的时候,也是处理一维数组的字符串值。。
5 S- |9 g2 k- {5 r
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php* x, t1 }9 D" c& k

  2. 6 B! c+ L/ f# |- C7 Y: l
  3. $arr = array(
    5 k: m2 Y/ q/ X& J
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    4 c- b9 D2 s6 J2 Y1 x
  5.     'b' => 'XXX13188887777XXX',9 J% p7 i5 q  {8 D& D
  6.     'c' => 'XXXX918811113333XXXXX',/ F/ T5 r% _4 a0 g/ K0 d  W& C! i
  7.     'd' => 'XXXX188111133331XXXXX',& j; K# k( L+ ~
  8. );( @. k2 `  m% P: o

  9. % i% g0 }; x: G2 J2 H6 C* l
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    . W$ u2 c5 x2 n/ M# _+ v3 m+ r8 V
  11. 2 z! C7 Y/ O  S) U6 C; `0 N
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号2 K! _* F& O- E: N
  13. + T8 R  b8 y( V: \1 H1 y5 y
  14. /*** t+ g4 I' V# [; j
  15. Array
    : H& p  y5 V4 C+ Z# n. ~) \- d
  16. (! i) Q$ J2 ?. e) g1 ^
  17. [a] => XXX25012349999XXX" @7 j. v/ e& Z! w& x6 Z
  18. [b] => XXX mobile:13188887777 XXX6 A$ s4 c  y% y
  19. [c] => XXXX918811113333XXXXX
    / b  _# Z; i& X
  20. [d] => XXXX188111133331XXXXX, o9 M* h+ u) _8 B* p+ h
  21. )
    $ U. b7 `1 C! O2 |1 l  v8 J# Y
  22. **/
复制代码
  E& B, P' l8 |. w5 t  x6 T
! n. t1 `5 X, t. m  B
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 17:06 , Processed in 0.108245 second(s), 20 queries .

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