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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
: r7 D- X; H# {! R  V! V3 `
strtr()的用法:
  1. <?php" P, H8 \/ H3 T, e: e
  2. 8 Q. o; ?" j7 D6 s8 g
  3. $str = "test";
    9 l7 U1 I( Z2 W9 X( R

  4. 9 X, q, _3 s1 L
  5. $str1 = strtr($str, 't', 'z'); // zesz
    $ r  i' [( K  ~, \
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1: b1 ~) u! ~& U" f9 X) \7 b$ A3 h
  7. $str3 = strtr($str, 't', '');// test. X. x0 w5 n0 }
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    # M9 W1 F3 t1 M
  9. + W+ B4 L+ ^  z  y4 c9 V+ A' p
  10. ; f9 k* x3 i8 h' e3 a
  11. $str5 = strtr($str, array("t" => '')); // es. w3 u. y0 P! g$ x5 M6 X
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

* R) \" b) ]2 Z1 B$ J5 X
  有两种传递参数的格式,一种是数组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
( C$ a: n* d$ ?8 `
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php+ C7 z; P$ k8 v& Z

  2. % z3 d% Q# B! T1 n$ b
  3. $str = "test";- W- c- D) Y0 h9 ?4 D; y5 F

  4. ! R: x$ Y2 d1 C; W) F9 l
  5. $str1 = str_replace('t', '', $str);// es, W) L6 o  N# Q% ^4 b0 O; T3 M
  6. $str2 = str_replace('es', 't', $str);// ttt
    : o2 q$ ]# F5 F& D& {7 W
  7.   ]/ {/ C% Q- _9 g
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb1 R! m6 {/ B/ z" B# c" s
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    3 M+ n4 q6 Y0 F! S! |( A$ y) m
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
    / i9 q3 j2 D; o) r
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee% ~7 ~1 ?6 @8 B. r& l5 n

  12. 6 z. g' m  \) \% V8 R( J) E1 a
  13. $arr = array(. o5 S! F& D1 o+ u7 @8 O$ S
  14.      'a' => 'testa',
    $ [, B+ U( V# B& [' i7 U0 y' Y
  15.      'b' => 'testb',! z- ~- ]0 s! H7 Y2 T
  16.      'c' => array(
    , N- W) o" G' a, v9 ?' L
  17.          'ca' => 'tes1',4 R* B2 @0 ~* X1 s9 E
  18.          'cb' => 'tes2',$ o6 R* }5 T6 U, r$ ?! p- i
  19.      ),
    # t7 X# j) }3 k4 B# \" E4 }
  20. );. r0 r$ Z/ V) S% {, c& D

  21. & P. f  N% o% T; ?# J! K6 ^
  22. $arr1 = str_replace('es', 't', $arr);& Y" W7 c' A3 X: Q5 s9 b2 ~$ U
  23. /**: P/ T, V7 k# U) O
  24. $arr1 = array(" ?) E5 r1 ?. Y1 R! @
  25.      'a' => 'ttta',
    5 j3 o0 v! ~9 |* @% b5 `( i/ l+ s
  26.      'b' => 'tttb',6 F& q7 k9 @6 C
  27.      'c' => array(
    1 k3 z, z5 k; M$ Z
  28.          'ca' => 'tes1',
    / ~3 p; j9 K1 O6 ]9 u1 u" D- i
  29.          'cb' => 'tes2',
    & G  R: x! m' _  f9 h9 J- D5 e5 z/ @
  30.      ),
    ! O/ E! Q$ H! h% r" ~  U* {
  31. );8 Z& I+ u* Z. U7 _
  32.   *. W, K5 i+ c& v$ R; w
  33.   *3 K- z% w; a- k
  34.   */
复制代码
' R( @& o! U! K1 A
1 [8 e( }* f1 Y0 R6 x1 R
+ Z! C. \0 \# ?
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。

/ ?# }, H- C8 Q1 b6 }% K# s* r
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    , h+ k8 b, t% l1 R
  2. ) y5 d! _6 z' O1 a2 w& W# X
  3. $str = "test";
    0 _  w1 ^5 l' [

  4. % _8 Q1 A3 i0 K9 p5 F, w. x' F
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    . ]* r) i) \8 \) {" C

  6. : c5 e7 a1 ]6 ~1 D) c# \- X) B
  7. $arr = array(, ?9 [3 c0 g  O0 g
  8.      'a' => 'what',
    1 T* T. K) p3 S1 o8 k" B7 ~4 {# f% E
  9.      'b' => 'are',! \: i2 J% ~# |0 d3 s
  10.      'c' => array(
    % R( {# A" H" `" X& O; H
  11.          'ca' => '11',
    - ~) Z( j" W3 F$ `$ A
  12.          'cb' => '22',
    ! {" D# x8 U6 `- ]
  13.      ),
    9 m9 }8 @6 ~3 `# a2 P
  14. );
    * {" h8 L0 h% a9 e7 t' X

  15. 5 q* j+ I" u+ s5 x6 N
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);# \& f* z9 N: n% f& F$ E3 ^( v
  17. /**  _) V7 g& l5 l
  18. $arr1 = array(
    3 C6 x, ^$ V+ D) g/ B
  19.      'a' => 'okhat',( ?9 R1 T, x. _, R) o+ B
  20.      'b' => 'okre',
    8 ]2 Z2 Y, I4 K# X- B
  21.      'c' => 'okarry': B9 e( B7 [+ q; F) f
  22. );
    4 }- N7 I# j0 @) A
  23.   */$ p& b# p) F% }# u( E+ m! g" r
复制代码
. m% T  G3 x/ L: Z) E5 V
数组替换的时候,也是处理一维数组的字符串值。。

( N# R/ [: U+ g9 j) [
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
    * Q4 P% k7 O! U) e

  2. ) c( q2 j. g; J1 o
  3. $arr = array(5 _2 `; U, l1 r) o8 c  L: b3 G# P; @
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    9 _, q! P7 O) Q4 o  C
  5.     'b' => 'XXX13188887777XXX',* t+ ^" `4 l3 u; Z! P+ r2 P' O( C
  6.     'c' => 'XXXX918811113333XXXXX',) c. r: {; g2 Y
  7.     'd' => 'XXXX188111133331XXXXX',
    & @" w9 ^$ L. o7 L
  8. );, s5 l* j+ p- M0 M
  9. & q1 |' w- E- e$ M* {7 b$ q
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$39 W/ R2 j! N* E6 T& }! z- w

  11. 2 {8 h" r; j2 V! y7 C
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号+ _( ~5 {+ ~/ X  p) x; G6 `
  13. 5 i, S1 G) H8 A' n9 e  U
  14. /**$ Q" J$ \* x* ]8 s; v1 L+ e
  15. Array& R) ?# [* ^' r# U2 _0 G2 G1 Y
  16. (6 U# y7 b: ?  h* H( m* m5 ~8 \! A/ ^+ Y
  17. [a] => XXX25012349999XXX
    9 H: `( ?" p- [3 a: R$ b
  18. [b] => XXX mobile:13188887777 XXX
    8 z. C# \( w0 A# ]/ z. B# n: v
  19. [c] => XXXX918811113333XXXXX
    ' {' ^& B1 e4 q, t6 X6 L
  20. [d] => XXXX188111133331XXXXX( J/ T: s4 f! U% R, Z3 M
  21. )7 z8 a3 \! t, S8 S- w" [0 i
  22. **/
复制代码

/ x* M- M) Q/ K
2 ~4 W5 c8 Q4 c: n, T- z/ h' G, [
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-20 02:14 , Processed in 0.132544 second(s), 19 queries .

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