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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

6 I1 L3 _" u0 G' V# f% I
strtr()的用法:
  1. <?php+ e; S) f0 P) z7 L) E# p

  2. ' I1 j+ ^' U3 G- a4 D0 r8 j. f
  3. $str = "test";
    3 a# l% ]0 t& m2 z: t
  4. $ @& _1 s" J; j! G4 Q  }
  5. $str1 = strtr($str, 't', 'z'); // zesz7 J$ c$ e& c6 m& \- w2 Z) q
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    . z* @9 V3 G2 y8 ?
  7. $str3 = strtr($str, 't', '');// test
    * T4 K1 ]* P! I8 c% _$ l% \
  8. $str4 = strtr($str, 'ts', '12');// 1e218 p; ?9 t0 y: L4 ?- G' N8 ?( A

  9. ' E0 A1 r3 ?. G  @6 h3 o  F- `
  10. * P: L3 e2 `0 }5 y0 G
  11. $str5 = strtr($str, array("t" => '')); // es
    : a) V  e9 {% x# `! j' B$ U3 [
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
- I) G/ C& B- }% @/ v  J4 e0 F
  有两种传递参数的格式,一种是数组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

$ ]5 ~( |/ f1 b
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php* e, K; y8 h" r

  2. : }. j8 V2 _/ Q+ p7 @
  3. $str = "test";
    , ?/ n+ C& Y' {' T

  4. 0 O- J6 e5 C; T
  5. $str1 = str_replace('t', '', $str);// es6 i3 \5 W( q1 t; _+ l* }
  6. $str2 = str_replace('es', 't', $str);// ttt
    ( q+ Y) \% {2 d; _, |  v

  7. 2 u: `! ?& g& R4 w
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    5 N* U2 B" X* q8 ^* E! A8 \1 k
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    9 G% r  s* }  M1 I, F- M# e
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa# _" U8 p  ?5 O; Y9 O
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    ! a) @% g1 O2 j9 q1 w. P3 b
  12. : A/ u, a$ M# l2 V$ A
  13. $arr = array(
    : N* ?3 E" ~  ]% v" M
  14.      'a' => 'testa',
    " T: n7 C& p! a  Y3 C- M
  15.      'b' => 'testb',
    % T0 m  a7 W; d4 C
  16.      'c' => array(& N* y1 o1 N( U7 N, Z& I0 m0 s; H
  17.          'ca' => 'tes1',8 x# T  r+ F5 h, j3 w% P7 j6 L
  18.          'cb' => 'tes2',
    # B- A5 Q% |. |% ?' p
  19.      ),/ C$ E7 Q' f$ x$ e* O" E5 H8 t6 M
  20. );$ E' h4 |: P* g- K) b9 u9 r
  21. 1 w) ], q/ N* H4 T3 a" |2 x
  22. $arr1 = str_replace('es', 't', $arr);
    4 v/ _/ [$ T( f) {9 v, M% U4 M  a
  23. /**
    & X" U, U+ R; d  u1 D
  24. $arr1 = array(5 y; k! ^& Q+ F/ B# m  Q( M* X
  25.      'a' => 'ttta',( A9 x, }* [# Q9 I/ W
  26.      'b' => 'tttb',
    % N  u( ^5 Y8 c' q% `: p
  27.      'c' => array(
    5 c3 q, |! b; Z& `5 H) j! T
  28.          'ca' => 'tes1',
    1 d" t7 P9 v# h
  29.          'cb' => 'tes2',: _) R8 Z$ d/ i) F# }, l7 U  ~: q
  30.      ),' ~: a- Q' _; C, C; a
  31. );
    5 i/ z6 U% \# D4 s" l
  32.   *9 P) k$ C8 t' w" [+ A6 ^4 }
  33.   *
    ' S9 v* C( z: M" _& F2 _
  34.   */
复制代码

) E7 |2 H$ K- T' a1 M4 h$ }
$ d# z5 T* P! I
0 S- w4 E1 H8 P# N/ a2 V
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。

2 @3 U' f7 a2 ?4 @/ d9 a
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    - ?* I& W2 q) p: a& N; e1 `3 L0 p9 `9 W' a

  2. + h/ n9 X, I! e, V) M# E
  3. $str = "test";
    . X0 [7 q6 f" _0 Q) |; f

  4.   z. p0 j6 F7 @2 u
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    % p+ y1 N% X, \9 E: W; L

  6. - q( x5 K' ~4 J6 g
  7. $arr = array(
    + V6 D8 g* z2 Y* D
  8.      'a' => 'what',
    ) H6 H* x6 p6 A0 i& V1 c, y" w
  9.      'b' => 'are',
    8 D1 Z# m3 a+ [% q  D
  10.      'c' => array(
    5 g4 e8 |  R# m8 C% Y. K
  11.          'ca' => '11',# j( R( b- R$ b- S
  12.          'cb' => '22',5 L1 |% K8 M+ j0 T; s) u
  13.      ),# }% K+ E* Y- v% s% s9 H" X& U
  14. );
    : d* g) V  @. V

  15. * ?6 d4 X) B, ~3 ]" e
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);7 _% R7 g7 N8 X
  17. /**
    . }! t/ ~9 V$ A  Q# p
  18. $arr1 = array(
      R( C$ V2 L7 {: j
  19.      'a' => 'okhat',
    6 @/ e% j8 U5 W/ v7 x* X: n
  20.      'b' => 'okre',
    ' n5 Q4 H& Z& ]9 B5 K
  21.      'c' => 'okarry'
    + E  x/ @# d: n: H. S+ a
  22. );, j& g( \" l+ b) p
  23.   */% T2 a7 P  i- D* N4 @( J# J
复制代码

2 c- l0 U' k$ Z7 E* c1 I! Y+ W
数组替换的时候,也是处理一维数组的字符串值。。
8 w/ S' l+ s: S& [0 y
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
    3 I% Q7 Z- o! {4 m6 D& V* `
  2. ) M( e& y2 r0 y  q: \! }' k
  3. $arr = array(6 H0 y* ?' D7 ^# w
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    * m7 A5 d& \. k
  5.     'b' => 'XXX13188887777XXX',  R: H2 |: v0 d4 C$ z, q2 T/ `. `
  6.     'c' => 'XXXX918811113333XXXXX',6 ^& b: z/ v8 \; R; }# O
  7.     'd' => 'XXXX188111133331XXXXX',. r' L" t! F6 ?5 e+ t" E$ L' [& B% L; z
  8. );
    ) @5 U( u/ _' h. g
  9. 4 `1 R8 J* K( V+ ]( d& _
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    ; S% M4 P+ ?5 X# V: i" M; @

  11. 2 k+ V4 u1 T; V# \0 O0 d
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号  \4 l% O' a- M+ D$ a% K$ ~4 `9 X  q8 e
  13.   [+ s# o2 r1 p/ n1 m
  14. /**
    9 G: d4 Q' I/ [2 u8 \
  15. Array
    * _- O0 M7 C9 G
  16. ($ L0 ?" f" k# W  C
  17. [a] => XXX25012349999XXX: C6 j: }6 F5 y( d; W
  18. [b] => XXX mobile:13188887777 XXX2 _9 T/ ^7 e* J8 T' E7 s9 ~* |( z
  19. [c] => XXXX918811113333XXXXX0 K. [) {' s6 o  V1 p4 e  ?
  20. [d] => XXXX188111133331XXXXX
    . w% J9 D. v/ i, t
  21. )
    # H) ^+ R$ J6 ~  j% b4 U
  22. **/
复制代码

; D3 V* A. Q$ \1 }  U7 m3 P& W# Z# x& r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 20:20 , Processed in 0.061419 second(s), 20 queries .

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