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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
6 ^1 D* Q4 `3 ]1 t
strtr()的用法:
  1. <?php& @* S7 T8 ]8 q+ s: @

  2. 1 [! K# G$ ?& J" v& b5 Q3 A% I
  3. $str = "test";
    : L, r1 |; o1 {3 m
  4. 4 m2 a. C, `$ k9 i9 P
  5. $str1 = strtr($str, 't', 'z'); // zesz* A9 p4 f5 Q3 z1 M; W) g" k
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1; G8 p/ {( F( a1 a/ w. Y3 y) ~
  7. $str3 = strtr($str, 't', '');// test
    ) r  r# S1 C* v# Z5 C3 O
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    5 r% R5 R& Q; o5 d' x% R- I5 ~& i

  9. 8 q3 j; E  Q7 H- k2 q# y
  10. 6 O2 j( v0 h! Z4 {; d
  11. $str5 = strtr($str, array("t" => '')); // es
    # t6 k9 @* D( [# r8 f, G
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

4 a) W! @5 ]) 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
* h6 ^9 L3 W# s& i. d
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    - r& N( ]' Z2 i6 B) p* E6 D: j: P

  2. # H5 Z* p8 ]5 m  R. D9 x) Z  c
  3. $str = "test";
      J2 k' z- q% u! q3 R
  4. 4 e' o' C2 H8 v* z$ H4 ~9 l) Z, _
  5. $str1 = str_replace('t', '', $str);// es
    1 \5 o( l7 g7 e- W$ X
  6. $str2 = str_replace('es', 't', $str);// ttt
    : K' O! ?9 [$ t9 F
  7. 4 W' w* ~, X8 _
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    9 j7 e% J; ]  N  ]+ y2 u* N
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    + v& n# t) F! N8 Z: r$ n2 g* [6 [
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa% n+ K' F, c  |2 P
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    ; g1 t0 G6 C3 M" K' j& f
  12. " o, y8 }# ?3 P6 ^7 Z1 S! ?
  13. $arr = array(
    5 t1 o" \$ V/ q. A/ C
  14.      'a' => 'testa',( ^9 N4 p$ e; s. h/ }
  15.      'b' => 'testb',
    5 a. p4 O9 Q- @- i4 R. a; n
  16.      'c' => array(* H. C/ ~7 V" z/ O
  17.          'ca' => 'tes1',3 t' q$ v5 x3 C" [' Z  J
  18.          'cb' => 'tes2',- f( g' f+ X8 C7 D. R3 a4 L& c! `
  19.      ),
    9 u6 G! P: l& m( I% @
  20. );0 O1 u0 r0 o" B2 }5 l7 U
  21. % o2 }* P/ y6 v; N  O  X
  22. $arr1 = str_replace('es', 't', $arr);
    , S$ h5 k: r0 A  J7 |4 _5 U
  23. /**
    & Y  |, Z9 Q; N
  24. $arr1 = array(1 o6 p0 Y2 s  M7 K4 ]7 ~
  25.      'a' => 'ttta',
    " l2 w' {" V7 k5 w
  26.      'b' => 'tttb',! p/ Y/ ~6 a' @9 F- C8 l- i- D$ Z
  27.      'c' => array(
    & ]. @0 q- e+ f/ ^8 q" `: A. X
  28.          'ca' => 'tes1',
    ; b7 w: H1 G$ u- g. w
  29.          'cb' => 'tes2',4 ]: [; x1 U# P& w; z/ E- r; k7 m% q
  30.      ),7 A6 }3 w5 I: Y' G
  31. );# V6 `, @+ [! h, k  r! Y* q
  32.   *
    7 l1 S: k, F7 E) K; A
  33.   *) \' H% p% E2 U
  34.   */
复制代码
$ P2 |* |9 m5 [5 u, y6 @
& e7 }$ R7 s6 r& o& e* \

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

+ Y( |. n5 Z  |( D
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php5 y' o' K) P. `$ o

  2. # k; r- P: t% E* D! ^" w5 r8 K! L
  3. $str = "test";( `% H2 O# G" r; ^7 Z/ p& g7 C
  4. ) Y" ~6 Y% x' d! Z: Z! y9 N
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    & D- Z3 A+ k# q8 f/ y
  6. - |$ P' c$ O% ~3 Q
  7. $arr = array(
    0 p3 h. ]. w6 a- U9 `
  8.      'a' => 'what',. F9 C% C3 t& J% N) v# z* X4 ~9 e# F
  9.      'b' => 'are',
    + `3 b; d. D" K* @5 r3 r5 i* S' D2 A0 r' |
  10.      'c' => array(  t( S: L3 s7 k" d% C5 |
  11.          'ca' => '11',
    ) _! a" T' Z. D: B8 h) t* C, v
  12.          'cb' => '22',' V' O* o* ]: K* M" g# L( k
  13.      ),+ W8 a# N! u- J7 A$ u
  14. );
    / Z. \0 [! L: v9 v( J# d
  15. 0 h) G% b( w  K1 e+ d+ G2 m
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);
    6 }% q) _* j- L+ G/ M! w
  17. /**
    ; w1 R/ \' G5 g! I
  18. $arr1 = array(- {0 D3 {- z2 g; U5 z; {
  19.      'a' => 'okhat',
    8 W, k9 o7 K  X0 O. f8 S
  20.      'b' => 'okre',
    ; S6 g) K- s. B. b
  21.      'c' => 'okarry'
    ; T  |: b0 O2 B# \: S& j  a
  22. );
    . V. U3 `* p  Q
  23.   */- P5 Q1 x4 N3 {' N3 Q; Y0 ]& u
复制代码

$ D# Q' w* L( d& K. i
数组替换的时候,也是处理一维数组的字符串值。。
8 F$ y& {. N! e5 n8 c
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
    $ G8 g# i  }$ |. O+ Z  B/ P- `3 c
  2. , [; B6 h6 X4 s3 W5 p2 y) d
  3. $arr = array(& X3 {  F3 u4 r
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头9 E7 m+ \, I' Q. A
  5.     'b' => 'XXX13188887777XXX',
    ' b6 K5 E* D7 X" Q
  6.     'c' => 'XXXX918811113333XXXXX',
    7 w* y0 {5 V0 ^# M
  7.     'd' => 'XXXX188111133331XXXXX',
    8 t! ]' L4 a4 Z% j8 T( x
  8. );
    0 [4 |& q) p  `2 G( L% L. o

  9. & K$ e) `7 N% \  W& m
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    : e$ A4 I2 E7 G3 }$ e
  11. " q: e* K' d( g% e! y
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号1 f0 R# E" T, V8 j& j$ @9 c) ]

  13. 6 j, h* {& O+ D9 M- y! o# K
  14. /**
    # d* m" i6 @7 {. }1 f( y
  15. Array& f* b% y# X0 K, E, W
  16. (
    ) {; F/ A2 r! h/ z6 ~3 s  a
  17. [a] => XXX25012349999XXX
    ; Y. T4 R4 b9 N3 m
  18. [b] => XXX mobile:13188887777 XXX; E9 B0 x. g) L$ I9 z% F5 v6 `
  19. [c] => XXXX918811113333XXXXX
    + i! N. U* L: o9 N( N: q- Q2 `3 K
  20. [d] => XXXX188111133331XXXXX$ o8 t8 G6 b5 U. ]2 O" V" |
  21. )
    ) M9 e' c- l9 \- `6 N
  22. **/
复制代码
! H2 g" L8 L( {1 X; \# R" Q
  [8 R7 K+ Y9 l- z6 Y; S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 18:41 , Processed in 0.069907 second(s), 19 queries .

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