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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
1 `* f' Z) z( o, ^3 w+ y6 J2 o
strtr()的用法:
  1. <?php
    1 D8 r1 s+ u+ @7 y: I
  2. / U. b# r) S" b2 D( V
  3. $str = "test";
    ' V- ?5 |: E8 D7 a0 T

  4. + _2 a! W5 N; C
  5. $str1 = strtr($str, 't', 'z'); // zesz
    ( g" w7 S% J& j! e  H1 K
  6. $str2 = strtr($str, 'tt', 'z1');// 1es16 U% n2 P% X$ ?" M
  7. $str3 = strtr($str, 't', '');// test
    # V& f" E4 P- n0 q1 Q, t& s
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    ' H' u7 M$ p) ?# w0 V' S; z
  9. 2 r9 s+ R4 t7 A; p- E1 a: L: K
  10.   A/ ^. q- l( ~' S+ y7 l
  11. $str5 = strtr($str, array("t" => '')); // es
    " r/ l6 \! J2 ?! X* N% K' h
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
+ n$ z$ e" ~5 d" 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

" l; V# d7 n( L% {( A$ e
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php; U0 d6 z5 t8 }6 x7 A$ ?
  2. 5 Q8 w5 S0 f& n9 s" X0 j2 r  \
  3. $str = "test";6 ^6 b$ M$ s& f3 q+ |+ {( x
  4. 7 N2 V7 t+ \8 ]# a
  5. $str1 = str_replace('t', '', $str);// es
    * v3 z/ {) `, c: L" W
  6. $str2 = str_replace('es', 't', $str);// ttt. F" }8 G0 N/ i- s8 L' |' x5 r

  7. ( W$ y2 O% r6 U+ _% u. L
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    $ I/ H2 H/ h# j. Z; ^; W( Q
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    $ a5 [) N5 g$ ]. Z( w" m
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
      l# k& e: [" V+ D
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee, H/ W% z1 Z+ O9 ^& B1 a5 O" e

  12. ' _3 u5 W* ?: W, q' \
  13. $arr = array(
    ( m* c+ P6 J$ s" I
  14.      'a' => 'testa',
    7 |1 Q. {) U! w# H- e, V
  15.      'b' => 'testb',% e& ]- i  J% Y0 w
  16.      'c' => array() g* o+ p6 |6 v/ k+ r. M
  17.          'ca' => 'tes1',* Q3 \( f& V3 B1 Z; M& ~( S, M2 Q9 c
  18.          'cb' => 'tes2',2 H0 M% `% D' k( r% M7 q
  19.      ),
    3 a  _8 [& ?# Y& m2 e. \* \
  20. );
    + v4 [+ v- h4 g

  21. . d: m( Z2 _8 `/ \- o$ ~$ P
  22. $arr1 = str_replace('es', 't', $arr);, g8 W' U* G9 f6 T4 d  \
  23. /**
    5 N2 H% b( q4 j
  24. $arr1 = array(
    & C- I, M4 j; L9 i, T
  25.      'a' => 'ttta',& U) @3 o9 J4 d, \. B1 \
  26.      'b' => 'tttb',& _" t! i+ S* j' s  h( R
  27.      'c' => array(% x! B& I1 Z9 V9 \& H
  28.          'ca' => 'tes1',
    : R' j  n2 Y. P" l; |$ W& Y
  29.          'cb' => 'tes2',/ Q% _  \' W$ g/ h: C5 n
  30.      ),9 H5 l4 g* v! I0 w
  31. );
    / O# T) p: r0 v  B
  32.   *% `- R- i$ F5 q7 Y8 p8 C
  33.   *
    ) E( {! g5 Q* K0 @+ g% i
  34.   */
复制代码

8 t4 h( i) d+ X. w! o8 E* t7 Q, c( v1 M5 i# I- U0 F3 g
( H! h. b) E5 [9 R2 g" M
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。

. t2 x  A) y$ k
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    + a. H3 f4 [! ~
  2. " K+ [; F! K9 U+ r8 r9 T: V! Z
  3. $str = "test";
    & {" Z6 Q. [* Q5 V
  4.   T4 X( Y2 S( G4 G3 v# q$ c
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt* ~0 f# |+ y8 R6 i

  6. 7 X4 c2 ^9 Q, a& J7 O
  7. $arr = array(
    ! v  a5 D2 |& D: O, J8 F
  8.      'a' => 'what',
    2 Z4 f) H' Q3 F7 g
  9.      'b' => 'are',
    $ V0 R' q6 B- E
  10.      'c' => array(3 I) G$ i; {2 C3 e( J/ [7 p% F
  11.          'ca' => '11',
    + E# ?' K" t: [6 }8 D3 C! ]
  12.          'cb' => '22',, P/ a! |) l. k/ G0 _( w
  13.      ),7 Y9 t( m- O+ z- P" x0 }3 {
  14. );% v* ^, M+ ?6 [9 X

  15. ; G5 k- {" \& F% a* v
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);
    ! p, q7 `' ], y
  17. /**0 A& @" K$ d5 {; C: u- u+ o' p, Y
  18. $arr1 = array(3 T- h6 O# `- u' |0 J7 a$ D
  19.      'a' => 'okhat',
    " K, T& @; O) a7 @' u) T
  20.      'b' => 'okre',' J4 m) ]- }! e* B6 C
  21.      'c' => 'okarry': D/ w% }$ ]! M' a7 t" ^" B3 \
  22. );
    $ v" h5 U9 e" T$ e  v1 W: W8 d( x
  23.   */" I1 ~1 m; @( O6 Y  j: c0 ]' N
复制代码

0 G- c: {) k' W& ]
数组替换的时候,也是处理一维数组的字符串值。。
% p, @/ d2 U- }' O
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
    / s1 n4 b* I- u# m

  2. ; |# [* N  x7 h% _8 J2 ~  Q: |
  3. $arr = array() L4 h! y* C& A' j  P
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头$ z' b# r* t% F8 c
  5.     'b' => 'XXX13188887777XXX'," [  r3 h. x- R7 H
  6.     'c' => 'XXXX918811113333XXXXX',
    0 V8 ~) z' a8 q, ~4 N$ {4 Y
  7.     'd' => 'XXXX188111133331XXXXX',
    8 B+ S. m6 [5 t
  8. );, Z! W7 `6 \* j, s$ ]+ M; `) |
  9. 4 W0 s( N( z6 f
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    2 y8 v2 k: S, f, q" Z, T" s* y8 {
  11. 4 A9 S, {. u: Q' a9 E0 l( M9 d
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
    0 K0 O; J1 r5 D* T, K) s
  13. * l) v3 D0 i4 g- ~9 J
  14. /**
    2 L% n5 q4 U% }, p+ |
  15. Array  _8 j1 \/ b6 ~' ]1 O1 C' s2 A
  16. (: V/ s7 ]& t/ G# s7 e
  17. [a] => XXX25012349999XXX1 Z' ^3 C1 x9 l4 p1 E  @/ |
  18. [b] => XXX mobile:13188887777 XXX
    4 g& z( o, }7 B; l/ [1 U
  19. [c] => XXXX918811113333XXXXX
    ' i* P5 r5 _2 m6 b. i
  20. [d] => XXXX188111133331XXXXX
    , r8 V* [; o  f# O' i9 g
  21. )' c: s+ q3 d2 f) L
  22. **/
复制代码
6 V5 y: o7 }& D
, G' x5 [; h3 }+ m' F4 `
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 08:11 , Processed in 0.055867 second(s), 21 queries .

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