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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

" y0 h; u. N* |1 i1 r$ U
strtr()的用法:
  1. <?php
    " g' a; G. S: t/ S( O
  2. ( D9 F" u$ E4 ?8 a5 x8 P
  3. $str = "test";
    ) D3 M" h& l0 x# h1 `) Z4 E
  4. 9 Q: b/ f* t+ Z& N2 x1 P
  5. $str1 = strtr($str, 't', 'z'); // zesz
    8 e2 z, ^+ D* m5 C& a
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1. n8 E, A+ Y5 U4 M5 L  C1 [  ]
  7. $str3 = strtr($str, 't', '');// test- j) l' x0 L  w
  8. $str4 = strtr($str, 'ts', '12');// 1e212 s1 Z9 R8 I6 }; R2 I
  9. ; l. ~& X/ b% K2 R
  10. 2 A3 i( ]7 W+ m
  11. $str5 = strtr($str, array("t" => '')); // es
    9 O) y6 P) m+ `& T! A: E
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
9 j# p: R- Y0 y! D) O; i
  有两种传递参数的格式,一种是数组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

3 `7 H" k  `& t* Y5 o6 t" r
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    . }2 d6 U2 W, f8 s" ?/ k" |4 ?. r, A
  2. 9 r' _9 F- i3 K( Q9 `1 J
  3. $str = "test";
    3 z" N" {( p3 |9 {
  4. 6 Q$ H7 O8 D8 P) L/ @1 o3 T
  5. $str1 = str_replace('t', '', $str);// es
    7 {8 H9 x* O( ?5 s
  6. $str2 = str_replace('es', 't', $str);// ttt
    ; t+ R  p+ |9 O7 l0 {* z3 Z

  7. # A* ]& P; }# J( x; _- U0 ~
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    & r& L+ x/ A' P2 U; h: H
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae  l6 Q, C. B3 Z+ g8 R$ X' p8 s
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa5 `' y' |4 h- z8 k5 ^
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    8 q( T' j& S6 ]( G$ t

  12. 7 E+ K* h- I% u
  13. $arr = array(
    2 _0 B- ~& z: n% Y
  14.      'a' => 'testa',
    ! t8 e9 }1 c$ @9 V! q
  15.      'b' => 'testb',, g1 m6 P8 p# z$ |
  16.      'c' => array(: _+ o  s+ k5 M. G
  17.          'ca' => 'tes1',
    $ P; a. l: H. v; u4 J; `# Q3 @: J
  18.          'cb' => 'tes2',% d. t/ J3 H6 n; s& R1 {
  19.      ),
    8 a: {. C' ^5 l2 c! [! i
  20. );" B' l0 M+ U) t
  21. 4 ~2 q9 W+ y% k) d2 k( t) E% h
  22. $arr1 = str_replace('es', 't', $arr);
    2 E* y( W8 n- c3 K6 {% I9 Q
  23. /**
    ' u! K  ]$ V/ K& G- ^
  24. $arr1 = array(
    9 m+ h1 C% h' Y6 ?
  25.      'a' => 'ttta',' v' q$ D% ]5 X# \1 k; m6 I
  26.      'b' => 'tttb',
    / J+ `9 V# E9 P
  27.      'c' => array(: N! i: U* S- l3 p4 d  v2 P. i
  28.          'ca' => 'tes1',) A, A! X0 ~- r: `
  29.          'cb' => 'tes2',
    7 z2 J' d1 b8 o4 F* J
  30.      ),
    / ~( E2 i, }8 [
  31. );0 h' Y1 Q+ j* T( I
  32.   *# n  D* A; y/ o  t5 e
  33.   *
    / Z+ X# r" G9 |5 r- j
  34.   */
复制代码

& u0 c9 @) K+ n1 i7 `7 ?! b  D7 w, l# j% ]& L* o
8 w# h; @8 ^  a/ X1 \
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。

- P- U" Z7 B% N8 x1 u& [  N
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php3 _; }0 O/ Y" ]8 u3 o

  2.   w0 w* Z. {8 }. G2 J" _& r- O
  3. $str = "test";
    5 I% o9 z3 o. u$ g
  4. & z$ O. f/ o* ?+ \/ g% ]. }. L4 ~
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt3 M# \4 U2 Q) G5 r7 q: G

  6. 3 |$ x! q( \' Y+ F
  7. $arr = array(0 a+ z7 o% m% v2 N1 c
  8.      'a' => 'what',
    8 X4 u6 z% I8 G9 ?1 ^& Y5 D- \
  9.      'b' => 'are',
    2 [" d/ L) m1 R6 s. B
  10.      'c' => array(
    % j, H% }- Z- q! N7 o0 z6 @0 S
  11.          'ca' => '11',
    : F) l: C4 U, i- \
  12.          'cb' => '22',9 s) ^4 n4 c" V' Y
  13.      ),7 c& @1 f: @, g' v& p0 f
  14. );
    # Y( }1 S0 S, @+ C
  15.   p: g4 ^8 W) v/ ^, {& E+ a
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);
    $ ?, ~1 P. c+ Y- G
  17. /**  y- t/ I) Y5 v! `, Q$ v8 R( z
  18. $arr1 = array(5 \0 K+ ~8 ^; O) ^: i+ g
  19.      'a' => 'okhat',
    9 a4 E# {0 \  |6 p' o( ^
  20.      'b' => 'okre',
    " ~9 j8 k' J% `6 N6 W6 \; q
  21.      'c' => 'okarry'- L4 ?; o8 i/ P$ L; Q4 r
  22. );) A+ u- B8 L: N0 f4 ~) ~
  23.   */9 n6 r; u! V  a! q' U) s/ X8 r, a' u
复制代码
! Y" M6 F8 h/ Y' r( _( ~
数组替换的时候,也是处理一维数组的字符串值。。

5 h3 q9 w# `% u  a3 ?: l. R
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php5 Y8 y2 l1 I- N: r( G; @# B
  2.   a6 W1 J4 f) G5 d
  3. $arr = array(
    8 B2 W' g; \- f
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    4 b+ ~6 G+ z+ _) _; U' W
  5.     'b' => 'XXX13188887777XXX',4 f, P3 k1 h- ]5 z$ V/ {% G
  6.     'c' => 'XXXX918811113333XXXXX',
    ! _; ^7 s* _! b* ]- _3 P( h
  7.     'd' => 'XXXX188111133331XXXXX',$ u" `4 E9 x: m1 [4 S+ y- g. V7 v' }
  8. );
    ; e8 m0 I8 H+ i! B" U  E" R
  9. ! t1 x1 A: l* r
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$35 ]8 s3 H- o3 ]& j9 X! R
  11. ! N. R. r% m- i
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
    6 u2 L- T4 }+ S+ S: N6 _# f

  13. $ n: E+ v9 W& S! ?% v& s  A7 i" y
  14. /**4 ]( k. z; [$ |# Z5 \5 d
  15. Array( v: T4 c% Z7 j# w9 h$ ^+ G
  16. (
    / r8 {$ m' g/ k- H4 O( z1 N
  17. [a] => XXX25012349999XXX
    / Z& _. v7 \- }6 N! \$ Z+ p7 ^/ t
  18. [b] => XXX mobile:13188887777 XXX* ]$ T4 j- |& Z. k
  19. [c] => XXXX918811113333XXXXX
    5 Y2 s- J& k0 K5 {' }5 X- Z; O$ H+ V3 p+ H
  20. [d] => XXXX188111133331XXXXX1 \8 I) |% }) p. I* J* W4 Q* p
  21. )
    ( f% F0 T$ ^+ G2 H5 ]$ V1 a% g4 L
  22. **/
复制代码

  f4 ?  e# ?3 l* p, J$ A9 A6 V3 n/ a: a; _7 B3 X# A: I8 D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-19 22:38 , Processed in 0.072059 second(s), 19 queries .

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