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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
7 _" d" |. L2 Q
strtr()的用法:
  1. <?php) @' |8 V9 l  D
  2. 0 K0 H$ v' F- P! @
  3. $str = "test";
    3 j' z$ T! u% Q5 \" Y# d& o

  4. , C/ P: d& Y+ J1 Q6 R7 B0 d' c
  5. $str1 = strtr($str, 't', 'z'); // zesz! Y# u2 D' |+ [1 R% Z
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    4 ]. Y' J! }7 c0 X1 A; U' o7 U9 _
  7. $str3 = strtr($str, 't', '');// test
    / f/ V6 |+ `* d0 X; a
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    6 p7 [; a/ Q: {: k  x6 S! w/ d
  9. 2 w/ W! _4 \+ w, ~; J
  10.   E* z3 o' ^9 Z. C! `: H
  11. $str5 = strtr($str, array("t" => '')); // es
    - V& y1 [- E% f, ?% F
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

: T; z7 S5 t8 O* C' H
  有两种传递参数的格式,一种是数组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
) o' D7 |6 W- k) q$ C: \) U
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    " z( B0 L7 v/ S( t! V1 O

  2. + Q* U' @: J$ A5 U: e
  3. $str = "test";
    " _2 d" ]6 ^, z& h7 C7 {

  4. ) b2 r* n9 l4 z$ G- G2 F, d
  5. $str1 = str_replace('t', '', $str);// es
    5 j4 c% q( `2 T: k4 c* Y( a
  6. $str2 = str_replace('es', 't', $str);// ttt' n& Z& P3 O* c# O  A9 ]
  7. 2 z/ k. ~% \) o1 O+ r* C
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb% z# Y+ N' K3 i1 O! c0 T) X' [
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    3 }+ g9 H% H0 d: g& }5 R
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
    4 u) i8 @. e2 q9 S) ]: m& \
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee% k8 U% G# U. S  x& W( a, F

  12. : }1 X- U, r) [$ B# {1 s
  13. $arr = array(" [0 F- U$ o' f% F
  14.      'a' => 'testa',5 V3 h  @# `9 ?
  15.      'b' => 'testb',5 c+ T& T& I# [+ s  a, V
  16.      'c' => array(3 E" w4 d% B6 _( F
  17.          'ca' => 'tes1',
    " W' U' y# |- i3 n( a
  18.          'cb' => 'tes2',0 `5 }2 D, k' ?- b
  19.      ),
    3 f, s. _/ f  y) E
  20. );
    5 v% Z8 [' C. _$ G+ D

  21. 3 a0 I' d. v8 f) C0 A1 h
  22. $arr1 = str_replace('es', 't', $arr);4 S7 O  |2 s* E; k! I; O
  23. /**3 l$ A+ S2 N/ s% l/ y8 B
  24. $arr1 = array(7 a: T% ~0 y& ~& y6 C! e5 y
  25.      'a' => 'ttta',( A" k. }- G; `& {5 t/ [: i# L. [# O
  26.      'b' => 'tttb',7 h. e3 n8 q& l# M+ P6 d, ]
  27.      'c' => array(
    # v' y9 P, g; @8 K! b
  28.          'ca' => 'tes1',/ o% Q/ u& f4 p' I" B0 U2 J5 u* S
  29.          'cb' => 'tes2',6 a. }( A  I: y: d- O" d$ P$ j" S
  30.      ),2 o" V: v9 _8 @" M
  31. );
    # Z* p* A) @( x! \' x
  32.   *7 S+ [  F9 k: m# U' _$ f
  33.   *
    ' L4 P3 r( D" ~6 O2 \4 I6 G6 D& \+ M
  34.   */
复制代码
  B7 M, x& a3 {! k* f" d
* Z5 j; m% X# w8 g5 t
2 U1 u! z( I3 U; M7 y
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
4 @: X4 L8 c+ H+ ], x4 j+ l
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php6 R/ S3 [( @. L0 y8 I9 m

  2. 0 r! S; u) m- ^
  3. $str = "test";& |* k3 d/ l+ l: Q- s! x+ D

  4. - {0 \0 d5 ]% U+ O7 T7 ]' q% Z
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt$ `2 U5 A3 J% u3 [. k* o3 F

  6. ) a6 X0 w# z# g) z* J* i1 H! z
  7. $arr = array(& n! b( a. N5 ^% Y" L
  8.      'a' => 'what',. {, e* E( T1 C7 b
  9.      'b' => 'are',+ `. G6 C' @2 @  y1 P
  10.      'c' => array(, Q" m8 U5 e2 e- b/ Y: k
  11.          'ca' => '11',
    " U; P9 g, g/ M' i1 z
  12.          'cb' => '22',3 d* e# L1 q) r  @. R" W
  13.      ),5 F) D" E, y7 l; b" j0 y
  14. );
    ' R9 P: q( ~" A# D4 Z
  15. ! a* {. r; k6 X$ X6 l' d0 R
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);  F- O  u9 L8 Q5 @( t, ]  I! t4 b
  17. /**- w7 r1 A) }: ]# g
  18. $arr1 = array(' e) w6 P+ S. d
  19.      'a' => 'okhat',7 {+ e' N1 U0 A! T3 j& [8 ]
  20.      'b' => 'okre',. V1 ^1 N5 S- @4 o3 ?
  21.      'c' => 'okarry'
    / e  s( ]. @0 L/ J3 u
  22. );0 \$ w- T! g  P; K9 z" O: Q
  23.   */% l6 e9 N7 U7 v3 `5 @
复制代码
5 t) m$ g  r4 H( g- D7 H( g
数组替换的时候,也是处理一维数组的字符串值。。

( X) f! u6 C$ i# K8 o
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php" t+ I  B3 C* D

  2. 7 {4 J. d! y% p+ h3 }
  3. $arr = array(
    7 o. Y& N3 A4 s( w: ?
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    4 X% c" W) F6 `1 v+ F+ d
  5.     'b' => 'XXX13188887777XXX',
    + c) l7 I$ _2 o/ U, d
  6.     'c' => 'XXXX918811113333XXXXX',/ Y$ n) p: ^% r
  7.     'd' => 'XXXX188111133331XXXXX',
    2 M6 }& `% ~, B# p; w
  8. );
    8 a3 w5 N$ I* q: g- V4 }
  9. ! [/ a0 U+ V) t2 O" {5 r
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    " \7 u% G5 Z& v3 R
  11. " y6 }2 Z7 a( q4 k$ r+ d
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号# N) v  L/ M! ^" j9 I
  13. 4 {  b/ N( f* x6 w' i1 e6 R& }
  14. /**- ~& w% |2 ~& _$ E
  15. Array0 f+ {, g6 z% M" k
  16. (8 l! U4 E) p" Z) ^+ i- P
  17. [a] => XXX25012349999XXX: Y2 Y6 D- F2 K0 D
  18. [b] => XXX mobile:13188887777 XXX
    ) Z! t8 X; s' C" g3 X
  19. [c] => XXXX918811113333XXXXX2 }) D( j  n# R* v# q
  20. [d] => XXXX188111133331XXXXX' ~+ k1 b* N: l, M% t, a7 [
  21. )
    ' L9 l( P3 B5 t2 ]& c' }  A
  22. **/
复制代码
! Q! x+ Y& x5 r4 y0 u: {) [
! h- W0 d$ A& I; e9 _$ K3 w, D! \8 a
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-20 05:07 , Processed in 0.134557 second(s), 19 queries .

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