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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
- i+ e* q* {, m8 \5 M! i  C
strtr()的用法:
  1. <?php
    ( J7 Q  a8 M1 K

  2. & n$ t. a& ]  k. K
  3. $str = "test";* e* M  r4 O6 C9 {: J4 Q2 L  {5 r

  4. , {5 D  t1 t/ W& b0 g
  5. $str1 = strtr($str, 't', 'z'); // zesz
    & M5 p1 Y9 P' \2 [) {3 ?- H9 I$ x5 o
  6. $str2 = strtr($str, 'tt', 'z1');// 1es16 @9 Q: b3 I0 \4 Y6 O, z. @
  7. $str3 = strtr($str, 't', '');// test+ q- i: u$ U* N) [2 ]8 `$ t
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    9 f$ B; `, C" X+ v& d+ g* c

  9. 8 P( Z! J0 @" ]! F. G/ E7 L$ Q

  10. 2 ?+ \9 G0 h4 M4 Q& x/ ]& w* E
  11. $str5 = strtr($str, array("t" => '')); // es" g/ k) o5 e2 l$ P$ V
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
( H6 B) a" l4 h; w* V5 O, X; E" 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
) P# D$ o& E7 p1 n1 ?5 w
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    , v6 B! w; Q  d% s# ~

  2. ' `2 z, m0 D' z$ q2 S
  3. $str = "test";5 q, Z" ^; D! ~

  4. - J" J8 T! Z3 m) C, _
  5. $str1 = str_replace('t', '', $str);// es7 ?2 J' \) p: G
  6. $str2 = str_replace('es', 't', $str);// ttt; d# K8 B$ ]7 w) u
  7. 7 L% y/ s7 ^9 g; U2 V1 `8 U
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    $ W9 V# l; U- @& u- @
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    ! Y. v6 `6 r) w* `  h% h+ d
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa1 b7 x; `5 E) O: O" @$ f
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    ! ]  C8 c: ]  r
  12. + z0 M' K9 S; F2 j
  13. $arr = array(# s4 Z7 y( G' Q2 {/ \+ {
  14.      'a' => 'testa',
    ) r3 u  w! ]& e  E% O# Z& H2 n
  15.      'b' => 'testb',
    0 F& n, a- C6 A$ |. }
  16.      'c' => array(
    : l" K# W) Q8 w. |9 B3 ^) @9 y6 z
  17.          'ca' => 'tes1',$ K: v- I# E3 ?" O; y* i
  18.          'cb' => 'tes2',
    0 x( z. ?6 c0 {% H- b) v( _, @
  19.      ),
    . ?" X' ~8 i% f) L% I8 P7 }; i
  20. );
    ; Q2 P- @: I  M5 e
  21. 8 U4 [! A3 V: s0 c+ p; M' |
  22. $arr1 = str_replace('es', 't', $arr);
    & k8 Y& k2 m: d* P, e9 P  L
  23. /**7 ?/ B& ]( b$ g; F' R3 O3 N
  24. $arr1 = array(9 c/ H4 _( \, D! v$ ]' w2 g
  25.      'a' => 'ttta',
    8 z! W# p: c3 p2 l: n& a
  26.      'b' => 'tttb',7 ^+ N4 `, [' M& H- ]4 L
  27.      'c' => array(% d8 ]$ M& h. L0 y
  28.          'ca' => 'tes1',  w! L0 ^2 o' @+ C) [; f$ i& \: Q8 U
  29.          'cb' => 'tes2',
    7 u( [, L8 E! U: ~* x* `
  30.      ),% D4 R$ e/ ^6 c
  31. );4 Q& h7 f( Z8 S2 F5 u  R4 k
  32.   *
    : M# |8 d# C3 v! n4 Q
  33.   *
    3 C* A9 F2 M; j  C+ |
  34.   */
复制代码
, F* v  k2 h: I% ]
/ u( |5 w3 i+ H- H# d; @) K

- J3 _5 U5 Q, V: ^2 e( J, n
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。

: Y2 k4 T$ L5 e% s' e
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    7 `, m! l1 K& y/ i8 h( W: i

  2. / p; ^1 [( A5 h' v, z8 L
  3. $str = "test";+ ]% v0 |' l9 \) ^  Q* g* Z+ L
  4. # H9 b2 @3 |8 {
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt  ~5 E- ?& d- j0 I+ y! A% _

  6. , q  q3 l# R/ m4 }$ p* ?
  7. $arr = array(& }, r' z3 K$ h
  8.      'a' => 'what',
    - v6 b4 ^5 M0 Q/ ^# C. x
  9.      'b' => 'are',
    ! n8 t, Y. t  ~
  10.      'c' => array(
    ! v1 ^2 y+ r8 r) A) {
  11.          'ca' => '11',3 ?/ B4 |* B7 d" D
  12.          'cb' => '22',! ^7 d4 C' b5 X1 N9 m
  13.      ),
      [* P( x3 P4 T- b, H
  14. );8 o- v' @5 R. [5 R8 v+ J9 o# a  R5 Z) O
  15. $ o3 C8 G9 t6 @+ z
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);$ I4 U$ F  e# Z7 [3 r, g
  17. /**
    * e/ s# `8 N+ p/ Z& k' A0 T
  18. $arr1 = array(
    0 D" E8 R7 F. N
  19.      'a' => 'okhat',% I8 `7 A# t  Q" T& `: ~
  20.      'b' => 'okre',
    ' ?* J' u/ i0 ~) j. _6 Q$ u, ]5 P. s
  21.      'c' => 'okarry'
    9 Y1 m  w$ |8 Y+ A' J: {
  22. );
    0 B4 _& a  e4 D- l! s" @9 H
  23.   */6 J% Q- S* i0 D; h5 l
复制代码

* I3 V4 B1 f2 b- o) A+ |! o, Y
数组替换的时候,也是处理一维数组的字符串值。。

5 e) |7 b# H! |+ Z% T
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
    4 g$ |' r9 M+ G/ m) Y3 Y, M
  2. * Z1 N2 y% P( t4 c, A6 K1 I) u# c
  3. $arr = array(
    2 _0 X( @$ k- u8 h1 `
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    7 R- D" J& B2 a8 N( z4 I
  5.     'b' => 'XXX13188887777XXX',: H4 U. y$ ^2 \' ~2 t! h4 J
  6.     'c' => 'XXXX918811113333XXXXX',
    0 V. @2 p6 j( x
  7.     'd' => 'XXXX188111133331XXXXX',
    : e0 `: e8 a& t. F, L) V
  8. );1 f2 q- Q$ H% E0 Z

  9. $ M& Z2 t1 m2 L: U! w
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3! }/ t; e) M' A5 j" X6 O
  11. & h5 i2 E6 ]0 z$ Z
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
    7 P+ z. O, B/ |/ Y; W+ p# h

  13. + W# L" q9 o% e$ c% K
  14. /**
    - B0 x1 b) z' H2 r2 b* [. b. R
  15. Array: ?; v" E; a2 i" s2 k' r
  16. (, d" W6 N* v1 d7 z  M
  17. [a] => XXX25012349999XXX
    6 N1 H5 Y! s$ z5 m9 y
  18. [b] => XXX mobile:13188887777 XXX
    6 o% x. t& Y7 G9 m9 s: W
  19. [c] => XXXX918811113333XXXXX
    + y5 l- m3 z% u* F; A
  20. [d] => XXXX188111133331XXXXX
    ! {$ |, T8 `& p9 r/ l) a
  21. )! U. b2 u: t8 C" y' I
  22. **/
复制代码
+ x) X4 p+ v! K0 Y; D- Z
! p; R, P) U$ |: L
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 07:08 , Processed in 0.051104 second(s), 20 queries .

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