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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
! W' \8 z. w" ]  Y
strtr()的用法:
  1. <?php/ o' A- z0 I- L
  2. . p. P3 W$ I7 a6 O/ c
  3. $str = "test";* V. `$ V) k+ D4 `8 k7 U2 R) l' b

  4. 4 n/ u" r$ N: Q5 ^' y
  5. $str1 = strtr($str, 't', 'z'); // zesz9 [- z$ h. l- L, b6 t
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1, e$ z9 v- |$ K& t
  7. $str3 = strtr($str, 't', '');// test' ?% n; @$ L: [' a. e- U7 Q
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    $ v4 e$ |, s) u' d$ k- h

  9. ; x  ^' @* l( s3 K0 x# H( n

  10. % Z4 Q7 D/ @; ]8 M" f7 |  V
  11. $str5 = strtr($str, array("t" => '')); // es8 Z( i- Q* Z0 D
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

) w$ ]) A8 `- ]1 }9 @+ G7 P
  有两种传递参数的格式,一种是数组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 S2 L% g4 W7 g9 [* M6 t. o% r
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php; P$ e9 J  Q2 v) s+ g) w

  2. ' R! ?' U! R  K/ E, ]' F
  3. $str = "test";
    7 O4 k: v1 J% _! K. p  h

  4. 4 A$ d! R; V0 z; L' D6 f, X) q
  5. $str1 = str_replace('t', '', $str);// es
    6 V& K+ ^% X2 J. x0 w8 C
  6. $str2 = str_replace('es', 't', $str);// ttt
    ) }6 Q5 E) L( @: l) A

  7. 4 U& q9 t5 z+ O7 ?' u3 h5 V
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    6 [# e# K8 z) J0 g  K2 }! L
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    " X- S$ a. g* A6 p; q
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
    - b+ p/ Y# L% q- v% l
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee# _) L; B* X9 F! ?+ I/ h

  12. ! _* d$ D& q6 X5 `( L" c
  13. $arr = array(
    ) L- Q4 Q" W0 A* D
  14.      'a' => 'testa',' R2 c6 K2 h8 w) T3 N# p
  15.      'b' => 'testb',$ c" Y$ a' Z; I7 A7 Y' }# ]
  16.      'c' => array(
    8 g) I& o, p( z3 O
  17.          'ca' => 'tes1',
    1 ]2 X6 y/ Y" s2 {3 O+ z: ?
  18.          'cb' => 'tes2',) W0 a5 i% b+ D7 I. G
  19.      ),3 g: @8 N$ I: O& H5 x
  20. );
    ! J! u$ }9 u2 {5 y2 K! i
  21. * P5 g. C, f! Y' A; @& e8 C, U
  22. $arr1 = str_replace('es', 't', $arr);2 o8 x7 r7 z) C8 D* W2 H
  23. /**
    9 e; \; ^0 a* ]+ h
  24. $arr1 = array(
    ; |( Q$ k" a' E4 u5 @' C( X2 s
  25.      'a' => 'ttta',& ~5 u# p2 N0 E' J
  26.      'b' => 'tttb',) n" \0 m6 E3 {; P- y- Y3 m
  27.      'c' => array() r2 H: j$ D/ Y% c9 o2 n* ]
  28.          'ca' => 'tes1',* d+ L% ]1 Y8 J$ z1 a
  29.          'cb' => 'tes2',/ E# E- t4 S9 B( _" i
  30.      ),
    6 E9 {: y) P/ V* J8 ]3 P9 N8 [
  31. );
    ) n/ U! o1 E4 l3 t* z- Y
  32.   *" ~5 F5 B; W4 M% D- @
  33.   *8 e7 t& h+ N7 T0 f, X' k. d. I
  34.   */
复制代码

' x6 k# B3 i& h
1 ?. v9 ~4 `5 b6 {% b+ p+ T3 ]. ^) \: R$ A9 [! \. w- k( S" U
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
8 V& L4 i. _5 G1 ]7 w
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php+ v" a% F# C0 k  C4 N0 w
  2. ! N. U# ?' h) U, N" f) y
  3. $str = "test";
    1 W0 X# Z7 z" u
  4. 4 W. H% ~! d' U; ~) {9 s
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt4 H( J7 u5 W2 P5 l
  6. ) q) C0 O+ z' U+ S
  7. $arr = array(0 U7 _% w' g4 P  K$ Z
  8.      'a' => 'what',
    7 n/ c! b* G. G9 T1 B3 T3 u# M
  9.      'b' => 'are',
    # w8 {; x& x% \6 e- t
  10.      'c' => array(
    6 {4 u' Y9 n" Z3 L% f% j
  11.          'ca' => '11',
    " I. O8 G) L  j( ?; e; `
  12.          'cb' => '22',
    ; h4 [; k9 O8 z! i
  13.      ),
    0 N+ A+ s( q, \! ^( k
  14. );
    ; G$ x  g& f- [, k' _. ?2 T

  15. # s* h8 U; \# g0 n' @/ t, h% [
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);
    ! D2 p% r4 z1 Z' V
  17. /**& u0 m6 n" R8 y5 o
  18. $arr1 = array(
    8 K9 C9 v& g9 i/ i$ L
  19.      'a' => 'okhat',! ]& C5 I5 g+ B" C" ~8 M6 G7 ]; w
  20.      'b' => 'okre',
    7 |; `5 l0 m2 g: ]& `
  21.      'c' => 'okarry'
    + p/ X% F7 B+ M2 M/ z
  22. );
    . g% `+ C/ m* H$ a/ L: ]
  23.   */
    ! {" _9 c  N$ x$ m! x) S
复制代码

- \- l" z0 T; t+ ~! E
数组替换的时候,也是处理一维数组的字符串值。。
' P7 e& s8 {  v
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php, P7 {: h3 @$ o, a) H* C

  2. # `. f) V% Z5 K* d
  3. $arr = array(
    % m" u) r9 X% E$ _2 E4 p
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    " W7 N$ Q: X, \4 k* ^7 n0 k, p
  5.     'b' => 'XXX13188887777XXX',; y8 x8 x& }  }) i1 O1 t2 L
  6.     'c' => 'XXXX918811113333XXXXX',
    8 j, I/ v, ]1 i5 T
  7.     'd' => 'XXXX188111133331XXXXX',
    # b/ F- o! q) J
  8. );2 f; U$ ^6 ^5 l+ M3 a
  9. ( [6 R6 |! j- `- j& f
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    2 p5 f. o* t$ ]$ |/ U- _2 |6 Q

  11. 1 Z3 v; U( V6 K0 O3 v, k. ?
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
    . I8 Y! K; J1 v4 ]0 b

  13. 6 ^" P/ ]  B0 r2 f8 E
  14. /**. I. ]7 v  k; R9 ~  S- R' R
  15. Array
    ! X+ K' \. f( U; W' g& c( |* D
  16. (
    4 o5 P1 O) o& ?1 d, G
  17. [a] => XXX25012349999XXX
    ; T" W4 \* \/ }5 D# v
  18. [b] => XXX mobile:13188887777 XXX
    5 `1 }4 J# D, r9 L
  19. [c] => XXXX918811113333XXXXX
    % L2 A" E* @( v" ~, ^2 l
  20. [d] => XXXX188111133331XXXXX
    * V1 D1 o# @# P6 k9 [; J/ h  P4 m
  21. )8 f; V3 f8 E+ ^
  22. **/
复制代码
/ E9 c4 L4 G' p2 R+ ~2 T2 q
- U: i- k3 x% v0 d" X$ z/ j
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-20 03:48 , Processed in 0.124416 second(s), 20 queries .

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