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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
2 d( X" F& p, B, G
strtr()的用法:
  1. <?php
    6 p7 z' K+ m  v6 C3 R+ y* T* i
  2. ) N& ^5 v' N, b' I5 f
  3. $str = "test";
    4 w3 A( @" y. L6 u' f
  4. $ w2 t4 B. K; d0 ^" s1 u
  5. $str1 = strtr($str, 't', 'z'); // zesz3 g  ]  W. r& s' C+ K5 }* M, t; R
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    ; H% M5 q4 D( Z
  7. $str3 = strtr($str, 't', '');// test
    4 n3 d4 ]4 ^- w8 h% J+ W. D0 c
  8. $str4 = strtr($str, 'ts', '12');// 1e21: t6 I5 E$ U, d! `: e0 M: H: I

  9. 2 U5 s- u0 G# C6 Z& R: {4 ~3 ?

  10. 4 z4 f! W! }" \" [" G! g; J, ^0 |
  11. $str5 = strtr($str, array("t" => '')); // es
    ' w! E: X5 W* p; b  ^/ L
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

: P2 ~  }: Z% d  H$ D7 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

: J( o% A. e; c7 X9 b. m; v0 J
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    # U3 F& o0 B$ K* }

  2. 6 T% W9 Y2 t5 A" k7 i3 {7 h3 g
  3. $str = "test";1 b$ @1 p' n' m( o
  4. 3 p0 U% \3 U) G/ U' p" M% v
  5. $str1 = str_replace('t', '', $str);// es- n' ^& l0 k. G2 ~
  6. $str2 = str_replace('es', 't', $str);// ttt
    & F: S  O/ X6 }( v- Q) u

  7. - L* F1 F( J. o
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb0 a/ U  N  B9 M! L: r* `
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    ! l, S0 [  y+ n
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa, l5 |% Q9 m9 u- k- ^, O
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee4 w( Q8 H4 c! O, S: @# j

  12. & z' p1 M$ o5 {4 I$ P0 t
  13. $arr = array(
    $ G0 w* |& R" v6 p2 |9 L0 ^
  14.      'a' => 'testa',( @: `( {. N. J
  15.      'b' => 'testb',
    / {: D1 u* V9 M
  16.      'c' => array(
    5 O! v4 `# D" z0 p  ~- j  Y$ a0 a
  17.          'ca' => 'tes1',! X& J: C3 j9 E' f% E# o& t
  18.          'cb' => 'tes2',! _$ W4 i- Z8 a7 ?
  19.      ),: }! _) U0 S: N
  20. );
    ; a) ?- K9 f/ }5 k" i, U4 s

  21. 7 R1 R3 Q7 p4 O
  22. $arr1 = str_replace('es', 't', $arr);
    9 P+ |+ ]3 Z/ P; b% @5 V& @9 D
  23. /**! R7 I+ ]9 J" k* Z1 p+ n3 K/ f+ Z
  24. $arr1 = array(
    + g/ ]* ?. |4 ]6 J) H! Z# Z' R
  25.      'a' => 'ttta',
    4 j& ^" \- \6 ~1 J
  26.      'b' => 'tttb',
    + V- Z- E: O; g
  27.      'c' => array(" C: u5 Q( b0 [! {& M! V& W
  28.          'ca' => 'tes1',5 l9 Z8 l# @. O, M* v/ N
  29.          'cb' => 'tes2',
    8 ^; M) t$ h( V6 v9 R3 m. D
  30.      ),1 e& {" y% W5 l
  31. );
    2 k8 w5 ^& @; P3 S) C. K
  32.   *
    1 P( t5 ^( C  X+ Z0 Y% u8 L+ k
  33.   *
    ' t8 u* f4 _3 c/ H
  34.   */
复制代码

: d7 W( d! ^6 Y3 ~) \
3 A# M7 V- y) e) }9 f7 e$ }
8 v  t) w3 S) k3 _8 D" |& u! C
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。

( {+ R0 s) r$ m# p1 ]) H0 H: W
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php1 r9 U9 F# F, y$ e+ }( k

  2. / j3 g  p6 B" E
  3. $str = "test";' \% G, e* y, s, d8 \3 |

  4. 7 B' l5 n5 h: s5 G& M8 S5 m4 p, N) _
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt6 [5 Q$ H) m0 @$ q# ^$ y( d

  6. 7 W+ A! @2 a: T) m, |) O9 D
  7. $arr = array(  w, C, z7 t6 N. U  ?2 B8 K+ D3 V
  8.      'a' => 'what',( V% o$ l8 g+ z! ~; v% C, R. K  o
  9.      'b' => 'are',
    3 I. \' B. o- l' u% Z$ q9 m
  10.      'c' => array(4 {6 J4 u$ c3 _) l+ L
  11.          'ca' => '11',. }* N7 C# M/ h) \
  12.          'cb' => '22',
    $ u( B) t1 ~: h1 R; T% ^5 V* S; ]0 n
  13.      ),/ g0 r$ R  H3 X- H
  14. );
    : v5 [- L- j! x9 n7 _
  15. , ?6 q) L* L8 J" U% V$ Z* E2 k: i) K8 B
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);
    ! f# ]) N1 w* ~: a0 {6 k8 m& h
  17. /**# V' B* o" k( h9 K, k& p* x
  18. $arr1 = array(
    ! ]6 ~/ H* A) D
  19.      'a' => 'okhat',
    / ]# {3 i: \) s! O" k$ j7 A/ [
  20.      'b' => 'okre',! c6 l' R! B9 T" K/ f$ m) f) L& e
  21.      'c' => 'okarry'
    $ ^9 G, U: B1 g* r
  22. );$ Q0 \3 w" ^( ~" s
  23.   */
    1 ?; T  Y( D6 j
复制代码
1 s. Q) G5 h* w9 v1 Y
数组替换的时候,也是处理一维数组的字符串值。。
; P  A' B( H/ {$ X* \" C
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php0 j4 J# f  `( X

  2. $ A' \/ n1 s7 c- N: j
  3. $arr = array(* Y( G) ~* h& `/ L) r$ i6 X
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头, `( B* d2 N) {5 ]  u# C, m
  5.     'b' => 'XXX13188887777XXX',3 B+ J: [1 ~% e9 C" u* R( u& ?# q; W
  6.     'c' => 'XXXX918811113333XXXXX',
      C9 e4 X+ Y+ J* m# @
  7.     'd' => 'XXXX188111133331XXXXX',
    0 w! [! q: l: f/ U
  8. );
    $ v7 _6 l& }' d( z( T

  9. : V  w& l& t$ Q2 J9 O! ]: u. i
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$31 C# i" `9 v/ S+ c# D( p; }

  11. 1 j5 r* h/ Q% ^0 G# P
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
    $ X5 W: X7 \& b; K

  13. 6 m* [, ^6 `. T; _
  14. /**
    $ S/ J( x+ ^3 U4 h( h) v
  15. Array
    / }$ w  d5 P: g- o
  16. (  S1 c* @) B" F
  17. [a] => XXX25012349999XXX, G# C  E5 `' W9 L
  18. [b] => XXX mobile:13188887777 XXX
    # Z8 ^' q  m& D! m/ t! R. l! z
  19. [c] => XXXX918811113333XXXXX- Y" [( ^/ Y* a# ?8 v
  20. [d] => XXXX188111133331XXXXX
    % h$ D1 W5 U8 S3 R1 p
  21. )
    8 i7 w/ A6 u$ c# P' i5 S8 x
  22. **/
复制代码

' M' `: o, ~9 \' g( z. ^1 k) |6 k* V* E, l- S$ u+ C& B
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 21:46 , Processed in 0.076015 second(s), 20 queries .

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