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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

$ l" ~6 n3 v* r2 t8 k
strtr()的用法:
  1. <?php3 O' E) [. ]/ B$ U6 ]6 z! f; x. h
  2. ( Y- w& P2 n8 B1 O" \: w! C
  3. $str = "test";
    * V- B5 e! |; n
  4. / _5 E" D2 N' [1 L' R! b# g
  5. $str1 = strtr($str, 't', 'z'); // zesz
    ; e5 [5 c: D" {
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    # t$ d7 n3 [/ `% ?
  7. $str3 = strtr($str, 't', '');// test
    ( q" M) \8 _& L2 h
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    8 Q0 F3 C! f5 v" P  e" s& n4 L

  9. . O. l$ J3 V) Y7 Y
  10. ; D; g: p  M) N+ j+ z/ {+ H  Z
  11. $str5 = strtr($str, array("t" => '')); // es6 [/ c0 f. M5 I0 U9 z( b  z
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
' F% Z- G5 Z7 l! C/ g5 X1 W
  有两种传递参数的格式,一种是数组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
2 Q; [! Q- t! P/ z( Y/ j, ?5 ]! }
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    0 A6 ~( x. N/ ^% O
  2. $ N4 L5 f" P0 r
  3. $str = "test";# h  o. M# ]4 e: q: i3 a( t
  4. 0 K; k8 y' @5 l  ?" S% y5 J
  5. $str1 = str_replace('t', '', $str);// es  v6 k% i* ~% O0 J, G) }: @
  6. $str2 = str_replace('es', 't', $str);// ttt
    ! G6 h0 l8 b& K$ ^, G5 `
  7. # \, c& l8 T# Q6 W
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    1 H6 P) h# W* C* ~) _0 K' G5 m
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae! ?0 Q1 F9 P) r4 J$ X, [
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa- J, x5 b4 G! O7 `& D# W  T) i
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    7 x, [( K. R* u4 R! o. w

  12. / B, H+ b* u4 E. I' t8 L: |
  13. $arr = array(
    7 ]2 m3 j. i0 Y2 y
  14.      'a' => 'testa',
    % N2 n( p7 `& k$ d9 v
  15.      'b' => 'testb',
    3 _$ y" ^' z6 S
  16.      'c' => array(
    + i" Q3 }* h! \0 Y% O  |8 A
  17.          'ca' => 'tes1',
    5 l0 T& F4 V- U( o
  18.          'cb' => 'tes2',
    ) M) p8 x: [0 G: o/ {: \$ Y
  19.      ),) ^( J% z; Z( ]/ L3 E7 H. n
  20. );: ?" Y9 Q" K9 L0 c1 t
  21. " J: Q6 q- ^  i, @) P
  22. $arr1 = str_replace('es', 't', $arr);0 [, N2 e3 T( z  w
  23. /**
    : N4 q8 P% ]# I: C' x
  24. $arr1 = array(2 f: _3 |% T+ i. x4 k0 _
  25.      'a' => 'ttta',6 q( ^) K9 t; h% E/ x
  26.      'b' => 'tttb',5 }! N) U, x: `8 {2 c
  27.      'c' => array(' H' {, Q* }/ ^1 Y6 Q9 @# ~/ x
  28.          'ca' => 'tes1',( r0 F5 R0 c0 y
  29.          'cb' => 'tes2',) h8 B8 ]3 `- b: L8 \8 `+ W  ^
  30.      ),
    % O/ W% j: O/ \0 K; B
  31. );/ j3 Q% {# U( n; G1 Z) _+ Z8 U
  32.   *
    2 G3 ?6 ~+ `& W# h
  33.   *
    ) S1 z" \0 S7 [4 \- W' g* ^
  34.   */
复制代码

3 }0 f' G" W; H) ~: H) S& b% A+ J
  C" C8 ]1 n" F9 `$ v" N; D
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。

0 D- }" H, L" h9 Y; q
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php) a1 ^: |. u1 l% p( h6 B, o

  2. . o1 q% I+ @; a- M
  3. $str = "test";, V0 {2 A4 k. v9 j! {; m, A( d
  4. ' {; G7 V; ~9 O
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt( e" c7 K9 X+ x) C2 R$ K. f
  6.   c* y4 u, L7 z
  7. $arr = array() G; J7 W8 R$ ^" I. V
  8.      'a' => 'what',& F3 Z( z, C1 Q! ]% G/ b( Y+ W) y
  9.      'b' => 'are',' y" o( G$ y$ @# f3 y  V3 J% C. ?
  10.      'c' => array(+ i7 [* ^4 [' v8 f! @
  11.          'ca' => '11',6 k8 |% u! P7 [7 `5 Y  d# Y1 L
  12.          'cb' => '22',
    2 r4 C% @/ u/ |2 ~# {" L2 r
  13.      ),& @- D* j+ Z' U! d
  14. );# C/ R& G) d+ _* R+ X; w5 W! B
  15. " {% S1 h7 B( [& a/ c( F% U
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);
    # |; x! f* X- w" |7 X! ~
  17. /**- o: M8 @+ g0 `, D+ H0 W1 P5 L
  18. $arr1 = array(
    * B0 E8 V4 a% H
  19.      'a' => 'okhat',
    + H  k- l7 S  P0 U- n- j3 g6 z
  20.      'b' => 'okre',
    6 O' I9 Y" _7 ^; L/ x
  21.      'c' => 'okarry'. N4 ^& Z9 u; B9 w# g6 [9 q' l
  22. );
    7 H8 k* r4 o- |2 e2 o
  23.   */
    $ `6 b& Z$ E; f& ?3 k4 M9 W7 c( O+ I
复制代码

6 a: g' e3 {& T; W7 i7 }0 c
数组替换的时候,也是处理一维数组的字符串值。。

0 |8 F0 ^* z' J  e* \
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php2 K$ u  I" l" j3 p# I; W( \6 M/ F/ i

  2. / t* b7 z1 ]. F  G9 j, n; X
  3. $arr = array(9 U  j. _& z4 C
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    . X0 X  |* v6 Z, z# L+ g& o0 \
  5.     'b' => 'XXX13188887777XXX',
    3 {* s: n0 D  l* U& g/ c1 J
  6.     'c' => 'XXXX918811113333XXXXX',% f9 B( K' G1 Z3 l& S9 z
  7.     'd' => 'XXXX188111133331XXXXX',
    4 P: ^8 R2 z5 ?, [2 p4 P% g: m, h
  8. );
    2 `! q+ r6 J1 `: E2 \; i  P+ h1 _

  9. / n  R& S% N, r$ ?
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    * B0 Q! w. }5 K7 i# s3 N; @
  11. 1 t+ q% e. Q, R+ d: F& C! k
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
    9 {6 ~6 h* O" ^. R/ v0 n

  13. ) b: _0 d% P% {6 a, M
  14. /**: I2 V+ @6 n  ~' J5 i
  15. Array
    7 q# |! M1 k0 F+ }! T3 V. C
  16. (
    % p5 ?# G1 W7 K# x; E( X
  17. [a] => XXX25012349999XXX* R/ |) `5 y, T; m. Y# j) j
  18. [b] => XXX mobile:13188887777 XXX
    6 \3 I6 S3 \' f7 Q+ K( w; H
  19. [c] => XXXX918811113333XXXXX* o) I3 g1 I1 D$ K' d7 s& t4 e: q$ @+ [6 L$ u
  20. [d] => XXXX188111133331XXXXX& R8 L# o+ ^$ o* H! o+ `! h
  21. )$ e3 _4 B  s# C
  22. **/
复制代码

2 g, ~0 v! `( \& e- V+ l; {- w, ?1 k3 \; }# O0 a, e4 ~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-5-2 13:48 , Processed in 0.075853 second(s), 20 queries .

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