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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
5 _# W/ F: u& ?
strtr()的用法:
  1. <?php
    1 i, E9 n0 k- B* ~- S$ o8 {
  2. ! C( p: b1 f. B* A* I! z
  3. $str = "test";- v! `: X4 G- X$ h
  4. " ]8 J1 Y5 ^+ v3 S0 [
  5. $str1 = strtr($str, 't', 'z'); // zesz" V& j* ]- e/ Q9 J2 M6 U
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    . ?" A! B7 c- u( q
  7. $str3 = strtr($str, 't', '');// test
    " A) r4 {2 r2 N% V/ a) f
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    9 c0 Q7 \3 S+ T1 C) X, ]

  9. , D- ~7 D1 Q9 C0 O$ |& s

  10.   `2 v( D$ Z) h* h8 X0 ]- t3 y
  11. $str5 = strtr($str, array("t" => '')); // es+ a2 j7 }: c5 s& m; h9 N5 E+ W
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
9 _2 ^( H$ ~" o" C+ v) h7 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
  I  [& S) G; W" S2 f: q
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    % O9 E/ i9 U  Y3 F0 c" u: c4 z
  2. : O! c& c4 A- `: z5 b
  3. $str = "test";+ U9 o; h& `% {# R' Q* K) F1 m1 W% _

  4. 9 w; k$ b) h5 H: d& [
  5. $str1 = str_replace('t', '', $str);// es
    9 }- X' N+ }3 E, z& ~0 _
  6. $str2 = str_replace('es', 't', $str);// ttt0 E: |, h* G6 u+ x3 u
  7. 0 @1 x/ a+ z7 h5 W
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb+ j$ Q$ Q1 W  J! M4 {. r
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae! U, s/ c& J( v  d! A
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa& u# f1 i3 i' A
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    ! ?1 H# C5 o9 ~- T- P! k& |

  12. ' F/ K# ?( V2 e5 H2 w4 F# l
  13. $arr = array(5 ~1 e5 n  A3 N/ [1 A( Z; |
  14.      'a' => 'testa',8 B  k& N: a* N: S- O7 x8 i  }
  15.      'b' => 'testb',  U4 r6 M  ?: h* w, {4 @
  16.      'c' => array(
    0 Z  }3 h7 I4 C3 y- ~
  17.          'ca' => 'tes1',1 p: z, D$ G' y8 U" h% J; Z
  18.          'cb' => 'tes2',* C8 N0 ?; k* `6 n
  19.      ),: s8 A% {  T3 [; ?
  20. );
    " H& W) n* Z9 s
  21. . S" W% F, r/ Z8 P& L! B, x) i
  22. $arr1 = str_replace('es', 't', $arr);' T  b( \1 a6 c
  23. /**! c5 r: Q' w% K& t
  24. $arr1 = array(# k* D, H! S2 S/ \, d
  25.      'a' => 'ttta',
    ; x3 U. p5 c& l; z* P
  26.      'b' => 'tttb',
    + k. b) ~. Z; T; X0 i% q
  27.      'c' => array(! j6 Y3 g- D8 L  E
  28.          'ca' => 'tes1',
    ! }, l1 V# H8 l" Q" B
  29.          'cb' => 'tes2'," v; H/ f) X) U8 a) l
  30.      ),8 m6 e5 w# h" P! t% g% t
  31. );: F. t+ I" w9 d0 q
  32.   *
    7 |' @* E7 f- u4 L! V" z
  33.   *
    7 A* L* M! t4 R' z5 p
  34.   */
复制代码
+ l2 C8 z9 O' Q- d

, n7 {( t; g! g( F) L
6 n/ @: O2 y  w% Z% Y, k
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。

+ [4 ?% I2 \6 D/ ~' F3 a% Y
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php( n* J4 |+ |) \% m
  2. 2 }! I. |% f9 S% n! q
  3. $str = "test";
    . e+ W% F0 T, }7 [: q% k
  4. ) p5 n. X9 d" O" P) O1 {
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    6 `: O+ f' y. h' u+ [
  6. ; w1 Q! f8 g. P
  7. $arr = array(5 b3 L; r, Q6 C7 n. j/ e
  8.      'a' => 'what',1 e$ y- o8 e7 ]: b+ @
  9.      'b' => 'are',. h. D! A" K% U; ]
  10.      'c' => array(1 z% V- j  @( x6 t
  11.          'ca' => '11',
    ) c% z, q7 k, P  w# ?6 m
  12.          'cb' => '22',
    - |" m7 \' N! R+ j
  13.      ),
    & w; m  m% o* {8 }( x
  14. );" y4 Q4 F$ w* E
  15. + ?- E7 Q8 P) z8 }  W, p5 J1 J+ c( O
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);
    0 Q7 S$ @: K+ m
  17. /**
    ; r) v9 c7 @0 `) e! X  T: F5 ~
  18. $arr1 = array(
    " R: k" c2 t* v2 ?
  19.      'a' => 'okhat',
    8 N9 H3 `/ _  J( P4 W  C
  20.      'b' => 'okre',
    ! c/ V  I3 A' k! Q, l, v
  21.      'c' => 'okarry'& E( F0 P4 Y6 \7 a$ q
  22. );0 X- C: \& K4 K  N2 C% m
  23.   */
    4 D; t0 u% Q3 \, o+ l! H5 R% r( v
复制代码
% o! h/ ?& y! f) z
数组替换的时候,也是处理一维数组的字符串值。。

: ?, L. @9 D, k8 B
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
    8 Q- K1 T8 G( W/ k4 u
  2. ) q, i9 r2 v) U. w- N2 F
  3. $arr = array(
    * ~1 ~0 P* }2 l
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头5 [# c; q. ]1 y, p. @' |* }2 [0 g
  5.     'b' => 'XXX13188887777XXX',! B' U# k" b3 U3 E- |
  6.     'c' => 'XXXX918811113333XXXXX',
    ) ]5 L1 u3 Q6 F& M$ z3 C- F
  7.     'd' => 'XXXX188111133331XXXXX',- B1 @( b7 |/ _# `7 `6 s* n% e
  8. );
    2 `6 L& T7 d1 {* X* Z: a9 V
  9.   n6 ]( O! b1 \, c1 u
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    ) f4 o) W& ~7 ?$ e" H' u

  11. ! L; N2 ]1 \( {: P
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号3 a$ m2 \1 T. n
  13. . n6 |/ k% j1 G" K( |
  14. /**" c. r! E5 F9 B1 w( n4 M
  15. Array
    - \3 @1 |1 g% C! H. Z  P5 o
  16. (
    ; C, k5 z! O# @8 S
  17. [a] => XXX25012349999XXX- N% g, @* R4 `: h. f& M
  18. [b] => XXX mobile:13188887777 XXX$ w7 P6 \  h' p+ A( f
  19. [c] => XXXX918811113333XXXXX& T" f- W4 K- i+ j* G. R
  20. [d] => XXXX188111133331XXXXX
    ; D0 Y0 c) }5 B* j+ {' J/ n6 G6 d
  21. )
    4 e  A: a! G0 A
  22. **/
复制代码
; \) P. M- X# C1 E/ T4 a6 Q, u

' X3 s/ W9 O0 C
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 20:28 , Processed in 0.125860 second(s), 20 queries .

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