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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

4 C3 T; ]8 B+ f2 T- |0 }) }" e
strtr()的用法:
  1. <?php
    6 d) b; f. M! W  @# Q1 ~

  2. 7 C. ^7 A+ W" l
  3. $str = "test";
    6 x/ Z3 z: u; N& e  [
  4. , t: X! k0 d! h( P- `, o
  5. $str1 = strtr($str, 't', 'z'); // zesz  Z4 B) z' U& m9 I; p
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1* L8 L& o. E% d
  7. $str3 = strtr($str, 't', '');// test: {- _" v+ C6 q; q- r
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    $ e5 d, r# ?9 X; s( F- c# H

  9. 4 H/ O/ t8 P6 F6 ~( `' U) s
  10. ' c* q2 b/ l' E& B
  11. $str5 = strtr($str, array("t" => '')); // es
    5 J( H$ h. }2 j; Z5 x# W
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
+ ~  G9 Z' J. @. }! _) C  b: l
  有两种传递参数的格式,一种是数组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

/ ^! T9 {+ \8 A" u# I; Y  ?
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php2 D; J8 ?, @# [1 P4 ^

  2. , h* h# w$ v+ j3 f3 H) ]! `
  3. $str = "test";
    . @' C. K. d' ?$ B) ?: w' k5 |5 t
  4. 8 m4 |1 m3 D: ~$ w6 t: r6 E; Y' Y
  5. $str1 = str_replace('t', '', $str);// es
    3 l, R! F1 X8 ?# S5 v
  6. $str2 = str_replace('es', 't', $str);// ttt
    / L# f2 A$ q. j- r  Y5 N
  7. 5 o# d% w2 x+ H  F" c. m' m2 l
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    : G8 f6 y+ x' l. u; e2 U2 l
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    + i6 J  k' x  ^9 ?; r' B
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa1 b' M3 ]$ P6 }: S( `' J$ d! q4 f
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    " ^. P# X& H  }4 J6 [  @1 V
  12. ) K( ~# p* X" J6 N" ]
  13. $arr = array(; D4 Q9 a% U0 z5 G9 j2 q
  14.      'a' => 'testa',) `; ~6 S8 L* O$ d6 D1 F
  15.      'b' => 'testb',
    - \% d$ x! S5 `* [' I
  16.      'c' => array(! g% Y" u1 r3 C  r- n
  17.          'ca' => 'tes1',
    5 Z; H1 h% N9 a" v
  18.          'cb' => 'tes2',2 w6 ~' t6 o6 ]* w0 |" Z
  19.      ),9 u2 t% Y$ o& s2 e' R5 i; [
  20. );) L/ H# J, @- a( }
  21. 0 X4 o% p: I& }" d6 A
  22. $arr1 = str_replace('es', 't', $arr);0 ~( E1 ^1 s: ~% N# b& W
  23. /**& D9 Z% x3 ^. o# R. V0 q& E
  24. $arr1 = array(
    ) ~" S6 E+ o8 w! l0 N' o
  25.      'a' => 'ttta',
    * y# R/ o1 l$ L+ k7 D$ i+ `
  26.      'b' => 'tttb',
    ; t- R* f& m. N, C# C3 v- r6 B& U/ _
  27.      'c' => array(" Y8 }9 z6 |, e& s! y9 Y. \
  28.          'ca' => 'tes1',4 ?+ e- ~* }0 t- ]% ?
  29.          'cb' => 'tes2',
    8 z: o+ g$ {( K1 W
  30.      ),
    $ I; a, ^0 x, t: h; H
  31. );
    7 K7 y1 f2 Q5 M4 W( Y5 N$ N
  32.   *4 d. ?# N' f: l" F; O$ h0 C
  33.   *
    ( m0 ^$ S7 f; e6 j3 i3 H! N0 d0 R  t
  34.   */
复制代码

1 ^) K0 {4 R3 V4 |5 [' t& @$ y
2 |* Z4 k3 l* L' q3 S( P
' O" D* U' G7 I8 k, J9 }- n. H
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。

" x; c% n  a5 n* X
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    ) b- ]. i: j9 b+ T/ W& Z; u

  2. 9 ]6 @7 i5 R1 g. y# [
  3. $str = "test";
    / o. x6 }* d; ]3 Z$ U. ~
  4. ' e$ \% x) R/ k8 A# ?8 s7 ]
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    1 p* e6 O. F4 B) ^

  6. 1 \+ S& b+ k: q
  7. $arr = array(3 x: G3 k) f* H- o: ], X, |3 H
  8.      'a' => 'what',
    : t9 A* F, Z9 x, u7 ~$ G2 M( ]% c0 n* U
  9.      'b' => 'are',5 a# K5 `9 L* _
  10.      'c' => array(
    % z; J! d1 O+ X
  11.          'ca' => '11',
    $ Q$ n* Q6 r! e5 [+ k0 c
  12.          'cb' => '22',
    1 y7 ^- t9 m9 D/ [$ ]8 _
  13.      ),6 E5 H/ s% ]* M' X3 C2 L
  14. );( l4 P/ c0 r& P. ^6 u. h% `
  15. 5 @0 {( v9 q2 k) ^
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);* j2 h8 l) {' A) m, f: W; i
  17. /**
    ' J4 k4 Q& {' P7 T1 Y: s( i
  18. $arr1 = array(
    & y  w( P9 C+ {% G1 S
  19.      'a' => 'okhat',
    8 h9 y! Q! }9 \3 }5 q" h* e- {
  20.      'b' => 'okre',
    1 {' T  o1 h: Z4 B, P& A/ S1 W
  21.      'c' => 'okarry'
    " y/ H& x; J- A5 X& ^
  22. );" U+ t, r1 K3 O1 P7 _; O! S
  23.   */
    , K5 u5 X3 `+ T: B' |
复制代码
5 S$ v6 `* C! C5 J$ r3 z* Q/ d
数组替换的时候,也是处理一维数组的字符串值。。
( }* M1 Q1 [9 Q$ |
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php# }+ s1 Z3 s8 P! M/ l9 z: c

  2. 5 e* j: X; O5 Q. ~2 z  s8 E
  3. $arr = array(
    2 n& Z4 o& j4 }& k  _; X& A" O$ I% O
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    : k- m* l' a) U! W+ N/ x1 V
  5.     'b' => 'XXX13188887777XXX',
    2 [) U% K5 Q! i/ ~! K6 ]# b
  6.     'c' => 'XXXX918811113333XXXXX',; j5 e/ T+ s* B$ e7 F+ s+ c  l
  7.     'd' => 'XXXX188111133331XXXXX',- S$ S  d/ Z6 a0 D
  8. );; t, Q: \( D3 w0 P4 H
  9. " o. G# w  a' |9 l; n& x7 [
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    ; C, L# z( m" c" N4 T) V: _+ B

  11. $ z& D* \1 t& @; a% O+ E: o
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号- ]& _/ N: `. W/ T+ r

  13. * B8 K; e9 b2 ?, n
  14. /**
    & f( N9 d9 X6 \/ f8 w! I; p( }2 w: w
  15. Array  J' Y, G1 ^! N
  16. (  o* u6 q3 H9 p7 b# g
  17. [a] => XXX25012349999XXX
    # e, R- k1 T& w/ w& q. b' \/ E6 G
  18. [b] => XXX mobile:13188887777 XXX' C  B) I0 N1 z7 [! o
  19. [c] => XXXX918811113333XXXXX
    " b$ y5 D6 g2 b, [; l
  20. [d] => XXXX188111133331XXXXX
    , F% q; Z* s, f. {+ ^7 ?2 P& B
  21. )
    1 O  D% j9 x2 O9 T
  22. **/
复制代码

- O9 J3 C/ P3 z& I* {" S7 p
0 a1 i# L  z- r1 F- @  H0 s, K& n" @
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-20 04:19 , Processed in 0.074681 second(s), 20 queries .

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