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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

* z$ x0 }8 u' M# T% G
strtr()的用法:
  1. <?php9 X( M  F! a0 w
  2. , ]. \) B8 P, g- F7 A$ f
  3. $str = "test";- \  [( _4 ?6 D$ E! m# ^% e! Y
  4. 6 L4 ]+ t9 s- j2 m5 c
  5. $str1 = strtr($str, 't', 'z'); // zesz
    5 V- I) M* d" E; `: [# B- x
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    " {3 O9 F) W3 y; P5 s
  7. $str3 = strtr($str, 't', '');// test
    7 h6 H* Y- P6 M* c; s  t  W9 q% N
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    $ ]( A$ j7 a4 f/ ]

  9. ( \( g  q; X( m+ R* L

  10. ; W7 V2 b8 D/ `, h0 K
  11. $str5 = strtr($str, array("t" => '')); // es
    & _+ |$ s- i/ ]0 S" e3 _
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
$ E, Q- G! m6 j6 x% r
  有两种传递参数的格式,一种是数组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
4 t8 H4 J8 L$ o
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php8 c8 b+ I( Z% t1 z; X# G0 a. o
  2. + |+ B( @+ C$ X
  3. $str = "test";  T2 H- X( L, \3 \2 ~9 k
  4. ' g( Y" ]# H$ G* i7 L/ L3 a
  5. $str1 = str_replace('t', '', $str);// es
    8 R: R+ w3 N' {) j
  6. $str2 = str_replace('es', 't', $str);// ttt; O0 u. i. D. Z

  7. # D, d! y! K% R0 e9 J
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    8 Q8 T8 w6 L- |4 c
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    " O+ Q; A" S3 F. R
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa' f! y$ T$ J: I4 S" }5 b7 w! D& l0 ^' u
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    . R( l' c1 F$ B- S
  12. ( g! R( u0 ]! \, s  z8 D4 e
  13. $arr = array(& }! x0 a+ Y1 j- I
  14.      'a' => 'testa',
    + L, U. A; N$ s4 V# b3 |8 ^2 I
  15.      'b' => 'testb',) |( t( A( i$ \. r
  16.      'c' => array(
    " n6 V" P/ u6 g$ t& g9 t
  17.          'ca' => 'tes1',& l# z# Q: s+ f9 A5 _0 A
  18.          'cb' => 'tes2',
    2 T1 Z& O$ c$ l1 e0 A) d
  19.      ),  V8 K' w2 R5 a5 d  N% |
  20. );6 \4 `# E( ]2 D7 B2 J' A
  21. & x, q  M2 B5 S- ^6 b% C
  22. $arr1 = str_replace('es', 't', $arr);
    0 |* j9 L3 k  U  W7 m
  23. /**
    / a5 z% X! t: n! {; w% X; v
  24. $arr1 = array(
    $ C9 l7 v9 T! |9 v0 a5 V- L, U$ Z
  25.      'a' => 'ttta'," Q3 c7 N& M5 i, W/ g
  26.      'b' => 'tttb',
    / K# s% I# N$ O
  27.      'c' => array(3 |8 g2 O" r: w/ e( u# N
  28.          'ca' => 'tes1',9 _' m0 I0 [. F
  29.          'cb' => 'tes2',! A. O7 r! u% ^5 Y4 y
  30.      ),; r3 Y* ?% K2 h7 i; L' B) a
  31. );1 W6 L5 k9 j4 m7 ?4 }/ y
  32.   *
    ) h! Z/ h! s, h9 `! v+ Z' H& F8 z: F
  33.   *- \8 [9 r* a+ \9 E, p' x3 p# U* u
  34.   */
复制代码
1 m- U. t; R$ _; v/ I; g2 `
! }( o2 X8 Y# ^, e/ {
4 ~) Y6 A" t  U. d# Q
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
/ j1 P& H! z0 r7 b9 y" ?' W
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    0 b: H: h$ _- F9 J1 ]1 |0 I

  2. 2 {) _2 {" Q$ C; |. E) Y
  3. $str = "test";+ T' n0 Z' n* N4 n0 Z
  4. ; H% j" N" m* p# H" o/ H! i
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt/ h+ v) P/ k+ C8 B- o

  6. " B% L( e( y' m) i3 j7 Z
  7. $arr = array(& O" b4 B4 Y9 \0 I
  8.      'a' => 'what',
    # @& g, T1 c! A
  9.      'b' => 'are',
    * A2 k2 h) [( I2 E* _
  10.      'c' => array(% D, d: {$ k: w2 X, V
  11.          'ca' => '11',# O8 M4 G+ }4 b* Y
  12.          'cb' => '22',8 D" }, w2 X; P+ j& ?! ?& x
  13.      ),, N9 s/ E8 q3 e
  14. );' ]4 U, W' t% v- I3 Y, D: h

  15. % \" T( ~* {8 V" I
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);
    / {* G) h( I. L1 F4 x
  17. /**
    * m! s' }- y; ]3 v7 s4 \( z2 k9 D
  18. $arr1 = array(
    / g6 D5 S6 M4 V& x1 E' R+ A
  19.      'a' => 'okhat',- s1 @$ s( r3 y$ O' ?+ |
  20.      'b' => 'okre',. S/ z3 R0 ]1 f; {" Z+ }0 Z
  21.      'c' => 'okarry') K& ^, K4 \, p7 O& b3 ?' K
  22. );- n* p' A3 }0 m; O0 e" w; v3 C  d
  23.   *// O: B: @; E. V
复制代码

; [$ B+ s% ]/ n$ U5 n
数组替换的时候,也是处理一维数组的字符串值。。

& t: w) a6 W5 ?: X' K! v
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
    5 \4 b. G' M% I4 E
  2. : c8 [" u# H5 p( Q, a' P4 ~5 L
  3. $arr = array(
    : l* P' k3 h; {+ n/ x2 V1 b
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
      i! c( {" c, c$ m& m" m1 }
  5.     'b' => 'XXX13188887777XXX',1 Y1 _" x) U# r5 b7 a4 Y9 q9 L
  6.     'c' => 'XXXX918811113333XXXXX',
    6 H! g+ j9 b$ W- _  o
  7.     'd' => 'XXXX188111133331XXXXX',
    $ s9 \' U! h2 z' ^- ^( I
  8. );
    + [; F9 ~* H; [) X2 S! r

  9. 2 }6 u+ t/ o$ ~+ l. e5 e9 Q
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3* E2 e1 |  f; X) o5 @- M

  11. : d) G2 H, }' Q2 q
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号; A5 K6 g5 U4 R" g8 \2 ]6 b+ k

  13. 0 v8 F% F& N% Q$ |
  14. /**) z6 r: ^1 \* C( N3 x) z$ K
  15. Array5 y& d! X. `+ |0 O% V
  16. (3 c( E( p0 K  H0 B9 ~7 Q4 \
  17. [a] => XXX25012349999XXX
    9 D' Q1 {$ u: B( R7 o# E8 G
  18. [b] => XXX mobile:13188887777 XXX
    + {5 q! G) j% y, @0 g
  19. [c] => XXXX918811113333XXXXX. [% d) R, o1 {. `
  20. [d] => XXXX188111133331XXXXX
    % Y! O% Q' N& T. ?
  21. )
    5 v( D# Q2 g4 o. N
  22. **/
复制代码
- B% o$ m! a5 i( d5 O' u+ n# m
$ X8 {$ h: G) L  _; E( v, y( D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 17:24 , Processed in 0.050030 second(s), 20 queries .

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