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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

; u9 o7 k3 t# K6 u0 M/ |
strtr()的用法:
  1. <?php$ m8 \* n  V0 X9 s5 I4 ^
  2. 0 F0 M! _* V; [* B5 M' i2 L, A1 X( N, z- q
  3. $str = "test";
    ; _4 h, f  x1 d. h! u% W) K
  4. ( k( t; Y% _+ l& V
  5. $str1 = strtr($str, 't', 'z'); // zesz
    5 J" A8 e: n3 e$ y2 ^0 Z
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1- F: C% a) k( D3 E3 r0 a7 T' q
  7. $str3 = strtr($str, 't', '');// test; `& r' a" x9 N# w# C  _+ B1 L
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    * d1 a3 K' h; r, M! z
  9. . z# v$ A7 c% Z. f' M
  10.   `" @8 ^+ Y1 I. _% [
  11. $str5 = strtr($str, array("t" => '')); // es
    ! k8 |% h0 T' |% F$ M
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

* X" Z" O: |; f0 ]+ H' f# ~$ R5 h# q2 U
  有两种传递参数的格式,一种是数组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

! ~8 ~" D  t- I' {/ H: y% f
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    9 u! Q% {; Q* D5 ]! G) \$ {/ [6 O
  2. 0 R4 F- N2 \+ d/ f
  3. $str = "test";
    2 F$ \5 Z- K6 x3 g/ E4 I
  4. & Z7 C7 j1 Z; S. H
  5. $str1 = str_replace('t', '', $str);// es
    ' F) u, q6 t0 K0 x
  6. $str2 = str_replace('es', 't', $str);// ttt
    ! c: T1 q! Z. w8 B

  7. , m$ `0 v2 J+ X4 x) v2 I8 @$ l
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    ! j; b' h. g& y  D) f- `2 ~: m( L
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    + i* y! e, K4 H) Y$ J  n
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
    - T6 A% Z+ I2 p( h, V- t* w
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    9 V) L" S4 z/ d  t. Z4 p7 M# ?
  12. 8 o* m5 }- ~5 Y$ B! U/ i
  13. $arr = array(, [: ]' B% |. `! O( D
  14.      'a' => 'testa',0 o: N% t: i4 y5 N( g+ v
  15.      'b' => 'testb',
    " g4 f  U8 G9 r, v
  16.      'c' => array(
    8 r1 u% S+ M5 E& U
  17.          'ca' => 'tes1'," _: @4 p- A' N0 T; h0 ?
  18.          'cb' => 'tes2',
    # C2 J+ E& m& l# h
  19.      ),
    7 `3 }7 k0 [2 H! L* |, `
  20. );$ g& B  ~9 O8 H$ K$ z
  21. 6 B! Q; f) v( D( Q2 J7 z9 M
  22. $arr1 = str_replace('es', 't', $arr);6 r' c5 g% O9 r( y; }
  23. /**' A+ l2 e5 a; |" [/ v7 Y- s3 ^
  24. $arr1 = array(
    ; a* I/ _4 L' F7 V$ m
  25.      'a' => 'ttta',% M) W) E6 p- y& {" [1 j
  26.      'b' => 'tttb',% r3 h- ^/ }) W* W/ Q: y
  27.      'c' => array(
    * `. q" T8 Q$ s" ?' |8 |- P! T
  28.          'ca' => 'tes1',
    * t) l- h3 \6 V% E. c" A8 v
  29.          'cb' => 'tes2',  b+ |  `, X, g, l' E' z) A  V
  30.      ),
    ; g: m# Q/ d) k
  31. );
    9 r) ~- i8 b0 P4 [: a  ~
  32.   *1 C& f; k% W! R, f( _/ m
  33.   *+ m! M: z. Y6 p/ d) w
  34.   */
复制代码
9 `+ c8 y# L2 D5 E8 N1 u$ ~; C
5 o+ P) n# `, b, H2 z' \

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

' _1 h) M0 H/ y
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php' j6 q% H' H! p
  2. ( X1 Q% v" U7 x) }# ?8 ?: J9 `# M+ Q
  3. $str = "test";* r7 m9 h2 |% D4 Q! A7 q

  4. $ v: P, f, p4 i$ l8 @' \9 c. U9 B
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    : q- u( b2 L: V6 v8 q+ Q" l; C

  6. 6 ^) k% V' {3 M3 I' A4 O+ C) V% E# E
  7. $arr = array(
    2 M! C' K% G& @+ t- `
  8.      'a' => 'what',: p0 Y! n6 R6 r3 Q( y" e
  9.      'b' => 'are',+ t9 Q, W$ i9 X$ g7 C
  10.      'c' => array(0 V1 ?) X$ b- f5 s* v5 M7 s& t* M% k2 F
  11.          'ca' => '11',4 y0 B6 ^( W7 W( j. D
  12.          'cb' => '22',& q  A& u; |+ n* d7 J
  13.      ),
    3 v# O% v  A+ q- X
  14. );
    / G7 p: T. {( u

  15. / ~, I1 v* V" p" m
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);
    9 S6 ?1 I/ d* M& ]/ N! P& W
  17. /**  H3 ~/ R  U+ ^$ Z9 p
  18. $arr1 = array(
    - q8 B' p  G( G3 G  U9 N
  19.      'a' => 'okhat',
    / P) b3 y9 u4 j: K7 w4 v  O
  20.      'b' => 'okre',5 L; z7 [, J: L5 r
  21.      'c' => 'okarry'! g2 @3 A# i4 i" b+ Z
  22. );
    ; j9 m8 k/ f4 j) h- U) ^9 Y  o
  23.   */' l" }" |7 T$ x; T; }& g
复制代码

1 `( h0 n% S( s0 G# \, O0 ?
数组替换的时候,也是处理一维数组的字符串值。。
; O, F" ^" Z- `; @2 X" a/ i1 I9 G4 T
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php1 ~) Q/ h: Z" A/ l5 V. d

  2. 5 B7 g3 F2 U7 V  W
  3. $arr = array(" h# i' V, u. Y- m' \% u7 f/ j$ y
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    $ c. ?* |3 h7 z: d+ `6 l) w
  5.     'b' => 'XXX13188887777XXX',8 y6 P! \* E& w" L) j
  6.     'c' => 'XXXX918811113333XXXXX',; E& [0 I1 z6 Z3 o2 R- F; \7 k! \  T
  7.     'd' => 'XXXX188111133331XXXXX',/ p2 }; Z! A# N: ^: Z" B
  8. );
    ) i. M; F% V" ]; o/ t
  9. : X! L- Y: ?! S) x( w. k
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    5 M9 o0 ?) C, p; Y3 Y3 Q8 a3 I
  11. , q; e/ Z! a6 {" ~- t) a# e
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号/ d  e4 ^' Q* }, ^7 M$ E

  13. ' y; t" U5 y) ^! ^+ M! E
  14. /**  W' s) @! ~6 t2 H+ d) O5 o! F$ P: y' y
  15. Array
    $ t$ U. L2 ?& `6 \4 I4 ^
  16. (
    4 ^4 c0 D6 |. U; Z3 j
  17. [a] => XXX25012349999XXX/ I/ P2 Q- F) T# z+ _8 J& Q
  18. [b] => XXX mobile:13188887777 XXX
    5 e  b1 W3 H  a8 N4 k7 z8 j
  19. [c] => XXXX918811113333XXXXX
    ! b" {7 a+ d7 e* B( w9 E
  20. [d] => XXXX188111133331XXXXX
    3 l$ z3 |, Y( ?: m4 I
  21. )# E& Z. e' y/ D/ ]% `
  22. **/
复制代码
- j# |/ r: D' E3 S' D4 Z

/ X( J- g6 e3 b# @0 T& R2 L/ n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-22 04:12 , Processed in 0.057202 second(s), 19 queries .

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