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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
* A, r  q1 v. W
strtr()的用法:
  1. <?php* t) m) o- x* s  l" T0 U
  2. + q2 V! T0 g' j2 e( s! {) |$ J
  3. $str = "test";
    7 J' d* f( R$ g/ X$ D  p
  4. + x# c7 U- R9 C+ o
  5. $str1 = strtr($str, 't', 'z'); // zesz
    - C. J( A3 D, Q' R5 n  c
  6. $str2 = strtr($str, 'tt', 'z1');// 1es10 D$ V; E4 i. Y& Q
  7. $str3 = strtr($str, 't', '');// test( q0 }' e6 K6 ^! c, |6 H, l
  8. $str4 = strtr($str, 'ts', '12');// 1e213 e9 Z+ Y" \* P- ]
  9. ! ?7 a6 Y* |' M" h$ [) N

  10. ) c: [8 @" A2 Y, @6 }" }/ `" p
  11. $str5 = strtr($str, array("t" => '')); // es( V! Y1 p/ B* Y9 S
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

  i' w4 e' l- `" g3 S' c1 q4 q0 \
  有两种传递参数的格式,一种是数组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

# y$ e  U% H& r% x" E
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php" m+ T8 n3 O$ n: K* h% q
  2. 5 ]7 O& M1 o$ y' F
  3. $str = "test";) M$ W" I8 f  c/ s0 D2 j+ ?: ]
  4. 9 o$ V% |# V* j0 b8 {' ]
  5. $str1 = str_replace('t', '', $str);// es
    , t9 {3 W3 ~" h" A2 b
  6. $str2 = str_replace('es', 't', $str);// ttt/ I6 E1 X# G. {- W, E& X$ e7 H

  7. ' q* K; D3 v1 n3 _5 i6 u- O
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    0 s3 ]0 E) ?, Q/ E1 e
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    . v5 Y* T: V( g  A
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
    ' q; ]9 F, A$ k# e7 V, x( t7 v8 A
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    $ Y8 W# P- m% S

  12. : m9 u% z4 |0 y% n6 |
  13. $arr = array(
    * S( [: F  d, h0 J' G, N9 u5 U2 Q! M
  14.      'a' => 'testa',1 B) G) @! n+ d8 P8 ?5 I3 k( Z9 n2 S
  15.      'b' => 'testb',. I. L$ K8 ?8 O3 [$ I
  16.      'c' => array(
    # H' k  P" o( x, p) O
  17.          'ca' => 'tes1',# e6 @$ j% ?3 l
  18.          'cb' => 'tes2',
    * A8 K8 H; {. k2 s
  19.      ),7 _" A( m3 |6 c' }! p
  20. );8 q7 K% Q& G, z" ?4 ~
  21. 6 k+ v+ b" h  \3 O  K$ {1 ]) L" y  V5 ?
  22. $arr1 = str_replace('es', 't', $arr);+ B/ C3 O* |( P6 y3 Q  I2 `
  23. /**
    * T" ]2 s* d' O+ m9 H0 V+ ^
  24. $arr1 = array(
    ( t- E3 M3 R" _5 j
  25.      'a' => 'ttta',
    . q) t1 P% {- `
  26.      'b' => 'tttb',! D0 L0 m% x; h# \
  27.      'c' => array(
    6 }% @- A9 I! ~/ ]" ^8 b
  28.          'ca' => 'tes1',. r1 u# D: @$ @5 F" F/ N$ @( U6 N
  29.          'cb' => 'tes2',; j, _# n5 H- H! W
  30.      ),
    / @% {8 r. f8 i( k2 u8 B1 e
  31. );
    3 z6 L' U1 B, [: R5 w( A
  32.   *' L' s9 R( N1 I; T  P7 M( v6 @; x2 F
  33.   *
    ; V: h! ~+ Z" X
  34.   */
复制代码

. h" Y% Z' X" \% G0 t9 n: j$ k# W3 F7 u" Y) {  f
5 n5 ]& `( D& `) C7 A
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
! g, g/ N: \! P2 r0 U8 w; G
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    * D, K% Q, }' R1 z8 v. {! ]
  2. # \4 c# Q9 B3 ~
  3. $str = "test";
    " R, n4 g8 v1 D" |
  4. 3 Z8 e* H7 D5 @0 p
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    - q! `* z. q: R8 V
  6. 9 E% H, L3 _9 j. m
  7. $arr = array(
    2 @9 H- `5 k, d: S( w) x" ^
  8.      'a' => 'what',8 T/ [" T) a8 \) E5 Z% b: a& R+ b
  9.      'b' => 'are',
    2 v3 A8 H% g% y' t8 a2 x
  10.      'c' => array(
    , K8 E. |! r; _2 a' T
  11.          'ca' => '11',
    7 t2 z/ W* g( }/ T2 W' q
  12.          'cb' => '22',# v4 o& W% [2 ~/ Z9 B! p) i. {
  13.      ),
    3 U+ w! D3 }0 k4 z6 b- _
  14. );( f8 u/ ~3 N; x7 |$ f  z( x1 q

  15. ( V7 }9 G6 c7 d6 b! f" N- Z
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);, f9 u! f* f) Y' D( `
  17. /**- [1 p$ v* F* K
  18. $arr1 = array(. |6 o! E3 f( M& J& Y* R6 q- n5 a
  19.      'a' => 'okhat',
    ) Z. h- Q0 P4 m
  20.      'b' => 'okre',, _+ m/ U2 G: A. t+ Z( o
  21.      'c' => 'okarry'7 x. S0 L6 j; w2 n0 m4 O* a5 y
  22. );
    ! P) u) X3 Y  G
  23.   */1 Z" C2 p  k+ H4 y& e! |+ y1 q
复制代码

+ e. m7 p* s: H/ k5 g
数组替换的时候,也是处理一维数组的字符串值。。
$ W, R; x+ C  [& K6 y
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
    ; m) z# x# F1 X7 x7 [
  2. 4 S1 a0 H6 s$ q- }+ o
  3. $arr = array(
    ! r: w) H7 i) n4 o
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头- D/ k* G* r. x: P* ?5 q  [" F0 z
  5.     'b' => 'XXX13188887777XXX',8 [$ b, M& r+ z9 X7 {
  6.     'c' => 'XXXX918811113333XXXXX',/ m8 n% Z* X$ ]
  7.     'd' => 'XXXX188111133331XXXXX',8 s8 v2 V) Z9 Q: }
  8. );
    , B# A  t7 \/ a% A

  9. / q* L  }) H* {3 K5 T3 U
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$33 o" ?! y8 a% G
  11. - g" K1 G2 ]/ x8 t1 w  `
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号8 N% ~& v# |  p( m! a

  13. " @3 k7 R: c& |
  14. /**
      i- C& _/ y  e  o' K
  15. Array: N0 M/ K- d, c; s' {
  16. (
    2 C+ A7 W; }) G. O. x0 s$ ^5 {
  17. [a] => XXX25012349999XXX
    + w- ^! S, b7 I) c5 g. @
  18. [b] => XXX mobile:13188887777 XXX+ C. V9 D- ?$ ^% @, h
  19. [c] => XXXX918811113333XXXXX, V; l& F5 d6 f" O
  20. [d] => XXXX188111133331XXXXX0 ^3 [2 B; U7 C% S4 `
  21. )
    5 g1 @* I+ x1 V( j7 u! {
  22. **/
复制代码

, v3 @& T1 _2 k+ X
3 |$ Q, i3 h* ^+ \, u$ ]2 T1 Z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 20:00 , Processed in 0.126248 second(s), 20 queries .

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