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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
* O) j# ?' @& o5 M0 s- @2 K
strtr()的用法:
  1. <?php$ d5 h( x7 S0 c6 B2 m7 h) e

  2. 6 r* G' V' B/ w1 C
  3. $str = "test";
    . s! k- Y5 w7 C5 u5 d! e3 ?# Z6 e; a6 r- c

  4. * t% J; T' k/ ?1 ~; f- k% x/ Q. o
  5. $str1 = strtr($str, 't', 'z'); // zesz$ i. P6 H& b8 ^, ~0 a5 R! R" J
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    * P2 g1 o  ]% Y) ~  r
  7. $str3 = strtr($str, 't', '');// test" h, @6 N& T7 e# M) o3 Z
  8. $str4 = strtr($str, 'ts', '12');// 1e21; Y# Z+ b% R2 U) ^6 }3 F
  9. # b' E0 t, J$ D6 j& {
  10. 6 V' C$ u: F$ C) V1 e
  11. $str5 = strtr($str, array("t" => '')); // es! i& X$ Z/ B- n7 l& x7 D
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

& P: \  Q% a! ?' X. }5 S% w( _( d
  有两种传递参数的格式,一种是数组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
. }' {% `& M# G  w3 t
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php; x9 c! z7 W4 t# K8 }* F
  2.   K2 A" D( F9 t& }2 Y
  3. $str = "test";8 z3 t! t9 C; t1 @3 E' x

  4. 6 {2 e! Q2 E# z
  5. $str1 = str_replace('t', '', $str);// es! u6 x1 m# Q7 X# z" b0 L8 w) E
  6. $str2 = str_replace('es', 't', $str);// ttt
    4 P: o; \3 ~' d5 Z- u' Y+ J" N  h( }

  7. 3 Y" \4 |; f3 x8 F1 @6 F
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    3 g2 B1 z4 f3 w/ z& \2 D% y
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae, `4 f: h- J, b* U  ]  m: c
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa1 c; a$ D4 h( d6 |; B' e0 ?
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    2 G/ M6 X, N1 B2 C
  12. # }% i' E8 o$ L0 {
  13. $arr = array(9 _# x& O" G  l/ R) _
  14.      'a' => 'testa',
    ; G8 o  ]3 R2 I3 u2 b: C% h7 D
  15.      'b' => 'testb',% ?2 X5 H; M3 k1 K8 N: s7 [
  16.      'c' => array(
    / Y! `" {8 [8 e, o( c, _. o
  17.          'ca' => 'tes1',* K$ R5 Z8 h6 Y5 a1 I" K* i
  18.          'cb' => 'tes2',
    5 n9 L( c8 q* J2 T
  19.      ),
    + t  o: `; e; l8 j' W
  20. );
    ! n! V& V* h. R8 A7 s" m
  21. & r/ y7 P/ h% e5 q
  22. $arr1 = str_replace('es', 't', $arr);
    / m! x) b: [/ @8 w; f  }+ u6 b! j
  23. /**
    % Z, l/ a( o& d% E
  24. $arr1 = array(
    $ I4 L" |0 e: t! V3 f
  25.      'a' => 'ttta',2 F' o6 @% s2 B9 q! I
  26.      'b' => 'tttb',
    % H; V# O. D9 M1 M# I% C
  27.      'c' => array(4 f6 v+ T: d6 ?8 [/ _$ `. R
  28.          'ca' => 'tes1',4 E  @. Y" ]* G4 J' v; x9 c
  29.          'cb' => 'tes2',
    # t7 v( i' I5 T9 j, P
  30.      ),
    " m. P2 [" G% s3 |- n2 r
  31. );
    5 X! L9 @7 n; l7 K
  32.   *
    7 P( _) V. @' B$ P
  33.   *
    6 b: i" G0 g; b+ e3 m4 {3 {4 L
  34.   */
复制代码
' Q5 L5 n  Y5 l/ E

9 O* w8 V: I: g! K- `
( C& K2 h2 T+ M, L
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
/ x& m: B0 z/ A
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php$ ~( V6 _" J# T8 |+ Z% y

  2. # f" a, b* d" T  O
  3. $str = "test";& n& ?, M3 c0 v1 R
  4. - J" j% W# p+ {7 C) C  w
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt8 S- ^& M" X7 G$ s" _

  6. % b7 h2 J9 l0 i3 }5 ]8 Y
  7. $arr = array(  k: @( p; c0 g: ~2 N; l
  8.      'a' => 'what',
    6 Z; c8 ]5 l- V4 {
  9.      'b' => 'are',
    $ U2 {0 p/ Z/ y9 R" Q5 }7 G: {
  10.      'c' => array(
    7 [% h1 l, ]$ G; n) L# S
  11.          'ca' => '11',( ^* U! j/ [9 j# R% s1 _
  12.          'cb' => '22',/ P# i" Y# I5 N- b; c  G
  13.      ),9 L  I$ h( i' _5 f  q8 m& M
  14. );
    6 Y3 w# U3 U& c! ~. h. q0 s% f+ J

  15. ; }: H7 b; ]! D. ~5 g/ ~3 p; I, {
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);4 H3 E( j6 u) m  ?7 t9 K( y
  17. /**4 o2 \5 V( q$ [  U/ I0 U4 Z! r
  18. $arr1 = array(3 h/ `5 B2 I! j7 y8 f+ g( g
  19.      'a' => 'okhat',
    2 q3 A5 ?8 n5 ]& p, x* {
  20.      'b' => 'okre',; _5 z) T4 ~# |. z- [- f3 n5 N
  21.      'c' => 'okarry'
    8 s. j1 Y/ z! O4 _6 i  x/ K& f
  22. );
    & ]: b/ N( H2 v) A# G) n' Q5 S9 ^
  23.   */  w8 _; H2 U0 M3 c
复制代码
3 j, W8 e. n& v) \. M' q1 h( j
数组替换的时候,也是处理一维数组的字符串值。。

0 z9 k5 w  M0 [. \. q4 L
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
    7 i" J% N: w5 s; T5 T0 W
  2. % u9 j7 L8 U. W
  3. $arr = array(
    4 C; [, a( a4 \5 O4 D7 k: z$ w; ?
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    6 C& R' V4 M. R1 N+ P: l# F
  5.     'b' => 'XXX13188887777XXX',
    . T# q1 z6 [. G5 i  ?- j4 l' k: d6 @
  6.     'c' => 'XXXX918811113333XXXXX'," V# j, m3 J9 ^' `; J
  7.     'd' => 'XXXX188111133331XXXXX',
    3 A3 z- s' c7 X. C7 E
  8. );/ Z: T! j# V: z% e
  9. / e1 W: v& C3 G% U, E% I/ j
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    ! w! a7 @. v2 g9 `5 I1 u- p

  11. ' `: G& S6 E& T1 b1 T" ^
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
    ! j2 C4 J4 F6 ~
  13. ) ^* ~6 Q$ e% ^' W* }4 O
  14. /**
    7 a7 I( o# E; Y" g
  15. Array
    7 }7 i! j: a( r& U' d* x
  16. (
    - R( P% A4 W+ G+ O; R8 R
  17. [a] => XXX25012349999XXX4 T9 F9 g$ E. B8 R
  18. [b] => XXX mobile:13188887777 XXX
    + q2 n/ C1 E3 ?/ @6 q  K, D
  19. [c] => XXXX918811113333XXXXX
    , N$ ~6 t- y+ K) w, m& V
  20. [d] => XXXX188111133331XXXXX! a& ?& C. d8 `9 u+ R5 g
  21. )
    4 s$ g3 w  u+ S$ F* i! b
  22. **/
复制代码

; w+ l) `$ u- T" K9 O; x7 }, N2 W' r5 a7 J$ A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 14:42 , Processed in 0.114105 second(s), 19 queries .

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