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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
  n3 Y4 a0 ?& q$ @* K/ I
strtr()的用法:
  1. <?php! Z8 ~8 H# Q, T- z; z
  2. ' F2 m; y" e: x! U6 E
  3. $str = "test";- m& m% ^5 T! i  w/ Z
  4. + L# g* ]% e5 ^; q: |' p0 w( X* g
  5. $str1 = strtr($str, 't', 'z'); // zesz
    1 V5 T; W* _% g; E# `6 R
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1( w4 X5 i5 R; D2 ~* V6 M9 I& [
  7. $str3 = strtr($str, 't', '');// test
    ! D: x4 U  n' f8 q  u
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    : r( p; |. H' q1 ?% R$ E

  9. % f; V, ~7 d* B8 f" B( d, A

  10. & b0 `; l4 O8 v- g
  11. $str5 = strtr($str, array("t" => '')); // es7 ]; A. A* b2 x0 U
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

) ]" X) z& P( y& a. e- r4 }8 ]
  有两种传递参数的格式,一种是数组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

, x, o9 a# ~9 j+ W* s" X& y; I0 j
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    % g7 p) E9 ^5 j& p( M( |. Q

  2. : |* C: u0 ?, r# J. ^6 W
  3. $str = "test";! W8 F0 r+ \' v0 j: ~* D
  4. / |/ s& w$ m2 A6 e% \& C
  5. $str1 = str_replace('t', '', $str);// es* O' Q% h7 [4 E2 \) l
  6. $str2 = str_replace('es', 't', $str);// ttt
    4 A" t# q  W! T  `: I# ], \

  7. ' F8 h/ H0 c' T7 u9 \% P/ W3 r# _
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    # u  w0 r" L: L
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae& h$ s! T& @! I% {6 e, W$ b* u$ Z0 g
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa7 g& P9 }" Q0 ~
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    % [. U6 c; N7 N; K' ^' j* T

  12. : j( |! e8 t, ~+ Z' S
  13. $arr = array(
      o) W2 g! \! C( Z
  14.      'a' => 'testa',
    ; M) F  P& N% @+ V7 Q% Q, E
  15.      'b' => 'testb',+ A- u( I' l  M
  16.      'c' => array(5 g- {; i- e3 T2 E- c: f
  17.          'ca' => 'tes1',
    9 Q+ z* }, j. {" l
  18.          'cb' => 'tes2',
    5 q* _" ~$ _: s( F* b
  19.      ),
    - V! {0 T) u' l* e! r, W* {
  20. );
    ; |/ p" L& J. b5 z
  21. 7 ?  O( l7 ]9 Q7 G# v
  22. $arr1 = str_replace('es', 't', $arr);( e5 C+ F( G  H+ N  E- G" z. ?, L
  23. /**0 X/ e' T% F# U
  24. $arr1 = array(4 H3 Q3 T  Z& u/ D1 X+ }
  25.      'a' => 'ttta',+ w0 M% l& C# f- |
  26.      'b' => 'tttb',  e+ {& ~7 h, ]. H
  27.      'c' => array(
    ' h9 j  U# [: B" q
  28.          'ca' => 'tes1',
    * h: k- t- @5 X! f: y) m( I
  29.          'cb' => 'tes2',% ]$ N3 h2 v2 v5 ?; B0 F
  30.      ),
    7 u( y+ s! f2 [% Q( L! C, H( T
  31. );
    * U% B% \. K* A0 S9 o9 r+ O9 t
  32.   *5 Y3 F) T/ o8 w( c: A1 t# P
  33.   *
    3 B' @6 S  s8 K4 ^  m+ k+ J
  34.   */
复制代码

0 r5 [0 W6 P0 V" ?% a! ?- D. _
1 l+ Z, G: P# t. i( g
& n% \' [" E2 |) o; M
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
# t. E" C0 k2 Z- o& k1 u5 R
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php. Z2 i9 A/ `9 C4 F' n
  2.   D# L+ k+ j9 u, P9 R+ [  }4 @
  3. $str = "test";" r3 t2 A0 i* G+ M; l

  4. 5 W, e' H" A* F6 r9 K3 H& V8 X
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    ; K* h& ^# C+ I. X0 z) A, L

  6. 0 c0 c& F) f1 h9 l! J" i- s! F
  7. $arr = array(
    . C9 B( O% z$ C1 F
  8.      'a' => 'what',2 e0 g! D9 l* `+ H0 d3 Q; y
  9.      'b' => 'are',- W. M) }6 Z) |
  10.      'c' => array(2 w  J! i, f& A& [/ v! n9 M
  11.          'ca' => '11',2 Z5 y3 A* ^2 F' U5 p$ R
  12.          'cb' => '22',- I" h% n! Y( C9 Q2 h# P. {$ L5 D
  13.      ),
    ) u" Z! N+ l4 T- {. E  r! X, u
  14. );9 |+ y0 I; s5 q. G
  15. 1 S. o7 w- b  f/ i; h4 R. v
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);) }$ N1 _; H- \5 N/ C
  17. /**- |1 w& v$ M) T' ?& b5 s4 H* H  W
  18. $arr1 = array(* a+ Q) G2 i  a! ^/ R4 f# B
  19.      'a' => 'okhat',
    1 }& v+ g& I/ e$ j8 @' P. ~
  20.      'b' => 'okre',! a% s' ]4 q  h% e0 D" R# `# z4 U
  21.      'c' => 'okarry'( H/ W% R* ]& U4 d
  22. );
    : ^! u4 a  v$ t: b7 s
  23.   */
    6 N5 i% Z& W7 I6 ~8 W# H
复制代码

+ y* [& N, o. F- [' m/ o) Q
数组替换的时候,也是处理一维数组的字符串值。。

: T! Y5 b4 c* C3 _
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php8 C  `6 `- Y( c

  2. : L/ \, a0 Y0 e1 y* o- o* @" X) x
  3. $arr = array(
    : ]- v$ x) f1 n% l! d
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头$ _  k# }9 `+ z0 J3 j% }
  5.     'b' => 'XXX13188887777XXX',
    ' K2 H7 h% v4 s* x
  6.     'c' => 'XXXX918811113333XXXXX',
    % T4 B3 A* ~: J$ a
  7.     'd' => 'XXXX188111133331XXXXX',
    9 H; ?7 z( F" u" F0 U- J, A  ~% b
  8. );
    6 K* L$ _  x* i$ @8 T' U

  9. ! Y6 }9 l6 _  _; |4 M
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    , W& y/ j! T8 P1 W
  11. / d5 f" Q4 Y$ }: x2 a  T+ `* h
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号6 w" c4 P* A+ p& G/ o+ p. h' O
  13.   R' Q. S5 l! n5 {6 k* [* R
  14. /**2 w. [( B) `0 s; L  B% I, J
  15. Array
    0 B& I7 {( \, K
  16. (
    : x4 P: S2 l: V
  17. [a] => XXX25012349999XXX
      s, R# @5 Y* m
  18. [b] => XXX mobile:13188887777 XXX
    # G5 ~8 U! @: I
  19. [c] => XXXX918811113333XXXXX
    1 F! m) u7 R$ q+ j
  20. [d] => XXXX188111133331XXXXX
    , [* h! D) i+ R7 T' y
  21. )
    6 u+ r) @2 @+ A, X
  22. **/
复制代码

& p& J' f3 T8 P+ C# m& z$ H( y" s) Q2 o" D- U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-20 04:36 , Processed in 0.117855 second(s), 19 queries .

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