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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

7 f3 v4 @3 T- ?
strtr()的用法:
  1. <?php
    , [4 U+ g* V- n/ H% [9 k4 V

  2. ; Q: ]; S% H& m# G3 x; f( ~+ M
  3. $str = "test";$ S- p2 o" K' m

  4. 3 d$ k( p7 s+ L! g. v- ]
  5. $str1 = strtr($str, 't', 'z'); // zesz, k7 d4 |- d6 ~& q# K7 _
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    4 {+ s8 C! _" w; R0 o/ c7 C" T
  7. $str3 = strtr($str, 't', '');// test, Z0 W0 V: Q6 j/ }$ f
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    ! V9 s  c2 N! `6 \. Y

  9. # }2 U2 Q$ p' o1 e
  10. 5 {. y: {  ?: ?# Z. T; P
  11. $str5 = strtr($str, array("t" => '')); // es
    1 S/ u( ^: c/ W; \' q$ B5 f, b; j8 M
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

/ o6 |2 c. u8 s* ?2 W
  有两种传递参数的格式,一种是数组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
6 ~7 q2 t, j+ q6 l( s. G/ u
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    / |  ]8 P7 V: d( p: a

  2. 0 Q% Z  x; f! W% w& I  x
  3. $str = "test";
    . m2 l) k0 j1 ]

  4. $ `( g; F# \7 g5 v( p8 j
  5. $str1 = str_replace('t', '', $str);// es+ Q$ x4 j, |; j* s" y$ u; ^5 ^, G
  6. $str2 = str_replace('es', 't', $str);// ttt0 r" U1 ~/ H: i

  7. ' ?% Y! \7 `' k4 n
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    # }) ]8 R# R3 T8 E$ }
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae1 q. x9 C! C5 g( S, \8 N
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
    6 k' ^  e5 e1 C5 @
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee8 O) Q1 e- w$ s4 e" N

  12. + K. K( ~) V8 _% v( v: `9 ?
  13. $arr = array(
    1 C3 [$ w2 [, Y# X& [" P4 F
  14.      'a' => 'testa',
    : |; G; [) a4 {6 `
  15.      'b' => 'testb',
    $ P9 a! K2 X! s+ g+ r- d
  16.      'c' => array(
    . K6 q0 B' K0 s5 D
  17.          'ca' => 'tes1',% ?  m; K/ e5 B
  18.          'cb' => 'tes2',  c* A  c8 b4 h4 G) |* r
  19.      ),8 a7 F5 S; T; p- b* D5 f6 ^
  20. );
    $ g5 \, }1 |4 ]

  21. 1 d# O4 c9 c0 D0 z/ S
  22. $arr1 = str_replace('es', 't', $arr);
    0 l& u# b4 g2 _/ H7 w, z' [
  23. /**$ o1 y2 H  b! A
  24. $arr1 = array(' ]" D$ b' o5 _. E# G+ i
  25.      'a' => 'ttta',- W6 v5 i6 F' |" G# w
  26.      'b' => 'tttb',
    ; G1 c$ q3 k+ `
  27.      'c' => array(" y# J; |; e& t8 {
  28.          'ca' => 'tes1',
    ) E# H6 x; Y8 u+ y
  29.          'cb' => 'tes2',
      v8 p9 k3 Z% _5 B7 _1 G( I( \
  30.      ),( T- B$ O. A9 i' y
  31. );
    ( u2 T0 m( V- d7 L+ P
  32.   *
    / Z; n" N* g0 g' E
  33.   *# e7 V9 H/ L' n
  34.   */
复制代码
9 B3 O) |! @3 S

) T3 n2 k2 y4 q3 d6 M8 N1 O
1 Z0 I  `" ^1 n# l3 C
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
: F% x/ i& [* E5 [2 q* ~2 u1 b- H$ T) J
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    ( x" m( G8 p0 S' z1 s

  2. 7 r# m: o5 v0 ^$ Y4 i9 f: I
  3. $str = "test";# B4 \+ f9 u/ O( t5 _, C, K
  4. + G# ?. |- {3 w: p
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    - W6 h( }1 Q6 `- a" h
  6. 0 ?# J+ }* _6 O7 \9 |5 P
  7. $arr = array(8 u" U: Y& K7 _) c  F6 `& Z6 F3 F
  8.      'a' => 'what',
    9 o: o; @8 T4 D% `
  9.      'b' => 'are',
    $ w2 M( V8 {! i6 B2 R8 V
  10.      'c' => array(
    ' c$ O6 j# w8 K* A2 i1 u& I
  11.          'ca' => '11'," S8 c  U( _3 D- j- Y4 A7 h+ k. h
  12.          'cb' => '22',
    5 t8 V2 `5 g; [0 c# Z' G% @; L
  13.      ),+ y+ ]& W6 w& y# `  C. V
  14. );
    " \! k+ X: E* V- ~7 q) V

  15. ' d$ K! a! z/ ]% t2 U
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);
    & v& a5 d$ Q- P$ g( z7 T
  17. /**
    ! L( G0 f. B8 `. Q
  18. $arr1 = array(6 j, G* d1 V; L$ Z5 b
  19.      'a' => 'okhat',. d: p* a  v4 M9 O) `) I
  20.      'b' => 'okre',3 E, g3 V3 |  I
  21.      'c' => 'okarry'
    . p6 L. [5 j3 p$ q+ ~; T  D
  22. );
    0 E; {8 f% c6 D
  23.   */; {* C/ R& \1 z6 w1 g
复制代码

, D2 ^/ n+ _0 z8 z; `( `- e. @, ?
数组替换的时候,也是处理一维数组的字符串值。。
1 K# N9 e+ Q; K2 |0 y: [. s
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php( L" Z  w# p& i1 W1 A
  2. + z0 W' `( E9 p
  3. $arr = array(0 u; l6 z7 ^" c% ], u" r$ o
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    # s2 _* i1 I. g: u  }
  5.     'b' => 'XXX13188887777XXX',# P' @2 P% ~- x) _3 C" }( f" u+ ~4 r
  6.     'c' => 'XXXX918811113333XXXXX',6 x7 G- z1 |6 i6 s# V+ J. z/ Q1 j2 e
  7.     'd' => 'XXXX188111133331XXXXX',
    7 P8 I4 y+ I3 P& k6 j, _
  8. );
    . ?: S. E$ z0 D: n3 N' \
  9. # I+ Y% P3 b- a  P- ^& \
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    - k' C1 y) ^; J* s& D4 M
  11. ' t5 n( c7 \5 I% E, ?
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号! z0 U7 J4 T) {0 y
  13. ( z5 e' L. @- Q) [! Y# j! z; p$ Y, U
  14. /**
    ) t# N$ M# u2 G/ M
  15. Array4 W1 S) l' q* S
  16. (
    ' E1 o' t" r* `' J  Y" r  _
  17. [a] => XXX25012349999XXX
    6 o" z7 |# Y  ^' H& Y2 u2 k- F1 ^
  18. [b] => XXX mobile:13188887777 XXX& V  H9 C8 I! ~! L
  19. [c] => XXXX918811113333XXXXX6 Z1 K9 A* M1 j4 b: R6 p1 P; F5 ^1 G
  20. [d] => XXXX188111133331XXXXX+ @  g2 F  M7 f9 {
  21. )
    / g/ C! ?/ a( h4 v
  22. **/
复制代码
. |  y% S# J/ R

/ a5 z) K- L( |5 G! o* H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-19 23:05 , Processed in 0.057807 second(s), 20 queries .

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