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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
6 f) u8 _2 p" f7 w
strtr()的用法:
  1. <?php% N/ G9 W" d# r; B/ X
  2. 0 _1 P8 X, V5 P  [: N' M% k
  3. $str = "test";- i2 O- ?4 o$ h' g/ y. p

  4. / Y* ?4 s1 }. A, M! P4 ~
  5. $str1 = strtr($str, 't', 'z'); // zesz
    ( u1 E" J5 J% |+ o
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    ) h$ O" Y7 |: D4 I
  7. $str3 = strtr($str, 't', '');// test9 I. B( m* ?9 b5 B/ \4 v# O
  8. $str4 = strtr($str, 'ts', '12');// 1e21' q- m% F7 E. u( t

  9. 2 e0 B( D# L6 M
  10. 6 R+ b( `; ?; G9 D" T0 C: I4 z
  11. $str5 = strtr($str, array("t" => '')); // es/ M" W/ l. A) N; X" B. |" ~
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
; w+ h( T" ~9 \1 n$ W( O! s7 O
  有两种传递参数的格式,一种是数组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
  b. g& L3 v4 u+ C7 y5 J+ w. t
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    % S  p: g0 y- M  |  m( B
  2. : Q* a6 t9 \* t' V- k& W
  3. $str = "test";/ R3 y4 q1 C5 W! H
  4. * u/ c3 k/ u. E7 s4 g9 X
  5. $str1 = str_replace('t', '', $str);// es6 X8 P0 C/ V9 q& k. a. N
  6. $str2 = str_replace('es', 't', $str);// ttt1 S" p9 a- u8 }
  7. 6 U: p. h4 J2 y/ |: H
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    / K0 d* e3 j; |9 ^
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae/ q5 G* u* ~% s
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
    : }0 j, z9 N* t
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee7 s; M" h2 p9 S5 v' r' U; c

  12. , o: t4 G- E" s1 ^& U. S. m$ n
  13. $arr = array(. t) Z  B( T8 j4 M+ h/ ^' S4 b
  14.      'a' => 'testa',* l% I( _5 ]: X: ^! z0 X6 u- s
  15.      'b' => 'testb',
      U" D2 @9 J. f9 n/ L
  16.      'c' => array(
    4 r5 c, w. Y' y2 I* q" x
  17.          'ca' => 'tes1',
    ; n' z9 H/ b2 d
  18.          'cb' => 'tes2',5 r. f* v( U2 ~! h9 n
  19.      ),1 d4 D9 c1 l8 j4 g6 N7 q( Q; E
  20. );( K* K4 j' u# h# G4 m- x
  21. / ?* W5 c0 b: u5 D
  22. $arr1 = str_replace('es', 't', $arr);
    / `. I8 T# H3 S, O' m; s
  23. /*** c; `5 g" Y/ ~5 V8 Q
  24. $arr1 = array(
    ) V% [% g$ G4 F2 b( {' K( S
  25.      'a' => 'ttta',3 }3 ~9 r$ x; H/ U5 k7 r
  26.      'b' => 'tttb',
    : f, v9 h+ ]3 e: O
  27.      'c' => array(0 d+ y9 M8 `% y* J8 t' p# _
  28.          'ca' => 'tes1',9 r1 a. F% F3 W! D) F
  29.          'cb' => 'tes2',! L' I* A5 Z5 k4 g
  30.      ),6 C& l$ C6 ]; ]
  31. );
    ( n5 D8 Z- b3 U) p2 U  q& `
  32.   *
    , f7 m$ _* i3 K, l, w. N$ N
  33.   *, ]* Q" U5 P9 _) i  Q. S' t0 ]
  34.   */
复制代码

( t; {! u! C: X( f. J) ~
3 s" {; H7 U; M, u9 d8 s. @. Z4 Q2 x. s7 w$ D
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。

; W* t2 h8 w7 J: X. L# ^# l
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    $ W5 Y5 b6 V- d* X) S* C
  2. 9 m" |  H1 H6 `# P7 O- x- E( L
  3. $str = "test";# P+ P& n( E& T; g9 y* x" n8 a

  4. 2 ]2 `" J8 m0 M, _
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    & ^5 Z0 V- e+ K4 g

  6. + X$ d# g0 ^" I" q( E# l, P
  7. $arr = array(
    ) t, X9 G3 ~: t5 Y
  8.      'a' => 'what',* @* I* O" n* D5 ~1 o1 v
  9.      'b' => 'are',
    1 S, {, U( c1 V& _' U
  10.      'c' => array(
    1 C" n' ^- m$ v2 b/ u0 Q- P
  11.          'ca' => '11',/ Z" I& I! N! i. c
  12.          'cb' => '22',
    # R+ e4 }/ k, L+ L+ Z5 Y8 P+ G
  13.      ),
    9 J/ x0 D4 g; l
  14. );! R# \% R3 a1 A. G! s3 x- s
  15. # V& I, R/ A& T
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);6 b9 k' a' o/ p! E% q  i1 s" g- k* H, O
  17. /**
    : _8 [( u6 Q6 t
  18. $arr1 = array(
    : J  S$ Z4 C+ b, T
  19.      'a' => 'okhat',
    & p4 t, p" N  }& r
  20.      'b' => 'okre',! x6 R2 g, \# Z* W" t
  21.      'c' => 'okarry'9 P+ _# s$ r4 k5 K0 T) `8 u( j
  22. );  K: t& |6 I* Y5 D9 m
  23.   */
    : {- [3 B0 W# L, D! p3 N5 h
复制代码
- a$ a3 k1 w+ ^. J
数组替换的时候,也是处理一维数组的字符串值。。

; V: I- B7 @$ d) d1 ~4 U9 [
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
    * J/ l1 x2 c: R" }7 `7 i
  2. 2 l4 s1 t5 J1 W3 a. C' O4 e
  3. $arr = array(7 |6 ~) `2 t- a( `
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    ) W8 Z% l- T% b
  5.     'b' => 'XXX13188887777XXX',
    0 t5 x8 ]; Q) {( N
  6.     'c' => 'XXXX918811113333XXXXX',7 }1 o1 W3 x  ]8 P$ t$ F4 N1 {
  7.     'd' => 'XXXX188111133331XXXXX',# f& g2 A; ^- x* c! Z# [: t& y
  8. );
    ' ]4 ^$ ^+ N7 K) `  E

  9. 7 M4 U* u( ?/ H3 w- z, n; r1 y8 h
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3- ]. V9 _6 t; a( @
  11. ; P" ^0 }# n4 K$ A9 G8 [
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
    , V, d! m: o% f& e3 b6 E' \+ K; w
  13. 1 U3 Q9 }# ~; n2 K; x. U6 J
  14. /**
    8 P7 t9 B5 X! N7 N5 j
  15. Array
    * u: T% X# f: n; N3 n; N
  16. (! K0 S0 g( ?2 }  a0 _6 A& q4 |1 u
  17. [a] => XXX25012349999XXX$ Z* U) O; l& K5 {: k; M, }
  18. [b] => XXX mobile:13188887777 XXX8 X0 v3 U: x& r
  19. [c] => XXXX918811113333XXXXX
    $ b% ^# f* k7 w/ }# T6 M' b- ~! h, Y
  20. [d] => XXXX188111133331XXXXX
    7 I; T% k4 p  [$ q- K
  21. )2 M$ t3 I- ~4 t. V! ~
  22. **/
复制代码
6 S4 V3 H7 K( U

1 h2 {5 `* Z5 e& k1 ^2 O' i$ r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 21:44 , Processed in 0.059344 second(s), 19 queries .

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