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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
) L1 {! `/ [/ G" x% r- _3 _
strtr()的用法:
  1. <?php  g* S, S3 d# ~. A
  2. ; H4 g6 i4 H; s$ s; S
  3. $str = "test";
    % [, a. Q' N: |5 B

  4. / k9 m& e/ i0 S. {; B; I8 S9 A
  5. $str1 = strtr($str, 't', 'z'); // zesz( p1 `% `7 _1 @; s9 D! a- ~
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1# b9 G& V% D" h& n# r$ t
  7. $str3 = strtr($str, 't', '');// test5 L* O5 N% Q- @% [' o1 E
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    5 b6 |2 k8 U. e7 T1 R

  9. 6 a) H9 M7 d- V# W8 \: O9 A& w

  10. 8 }1 Z5 A! A0 m( n
  11. $str5 = strtr($str, array("t" => '')); // es( S/ W$ S+ {/ X/ _! u# h# M. Z% O
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

' O5 r! K! j, w8 K. b  b0 Y
  有两种传递参数的格式,一种是数组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

! X7 W$ d5 t) h$ ^
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php3 M6 V+ D; W! H9 ^4 \

  2. 9 G" W/ }' W  S; @5 q
  3. $str = "test";! w" s- k/ q2 `7 K' G7 b

  4. 8 ^7 B. i  n$ z! [$ V
  5. $str1 = str_replace('t', '', $str);// es3 S1 [+ ]0 ?' m+ Q
  6. $str2 = str_replace('es', 't', $str);// ttt& h. i  r0 C# Q" N

  7. ( [. L6 _' a  G
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    ( x/ h% r2 Z9 p) j; y
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    2 U) @$ Y5 [( K6 m( B
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
    9 z* A8 U! q1 k  O" I5 }$ B4 G( U
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee! _5 |) y& l, ]8 ~2 p# P& ^
  12. % I. N( Y" ?$ ]+ w; I1 z
  13. $arr = array(3 B+ L* Q5 V# O" x
  14.      'a' => 'testa',0 L$ Z! \+ R/ p  p  T+ |5 r
  15.      'b' => 'testb',
    2 R5 R; B0 _9 o' _; D2 |
  16.      'c' => array(
    $ K2 Q) |9 F( [- Y) o0 T' a
  17.          'ca' => 'tes1',
    " V3 C$ Y+ e4 N8 d
  18.          'cb' => 'tes2',3 O5 f) @7 D5 J; I  R
  19.      ),
    % I! g# L" z3 C! D1 X" U9 y" y" G8 c* D
  20. );- e4 x; [" Q& T) @' {8 L
  21. 6 {  U$ e3 l( O
  22. $arr1 = str_replace('es', 't', $arr);
    + c- h$ Z& u# `$ [
  23. /**$ _1 z6 g$ q$ @+ M& ~8 O
  24. $arr1 = array(, s: @  I# {) k: V0 f7 z1 t
  25.      'a' => 'ttta',2 _* s2 m! s0 U% t. P/ h- O
  26.      'b' => 'tttb',+ ]! z, ^4 m+ Z
  27.      'c' => array(
    ' v2 M9 u$ N6 G5 n  e. n. d
  28.          'ca' => 'tes1',+ e6 h# z: Z% _1 g
  29.          'cb' => 'tes2',
    , l( K- e9 |6 g5 L5 s$ J6 R9 ~
  30.      ),
    : Y8 L! s. g$ P; C0 k. @( P7 G( l
  31. );5 q  H8 S' G% {/ A9 s8 }; b) J
  32.   *
    2 ^( S) g& b8 x5 O) F, s4 q
  33.   *
    # W# a' i) ?, z) H9 h+ C( T
  34.   */
复制代码

  Z6 c5 H* P( M2 F2 \9 N( k
% u/ _1 R  ]4 ]
! E2 \  T: i. I& e
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。

& X. a0 g' i( j% @5 K: [  ]
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    / y! _1 A' X% x

  2. 6 I$ i$ |8 y* G7 J  F, [
  3. $str = "test";
      P, Z( _8 y, y' @# ]$ a

  4. . u6 C+ W9 I2 r6 J
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    % X% p5 q) D- z7 f* }4 ]1 y
  6. 7 x  E2 |4 C' z4 b6 p
  7. $arr = array(
    1 f8 O* t) M/ l1 c: x
  8.      'a' => 'what',
    2 `" z% m) i% ?1 _8 r
  9.      'b' => 'are',
    , g8 u7 A5 C4 V; @, ]; r% h
  10.      'c' => array(3 {9 g1 U4 @$ U  V; s1 T" o
  11.          'ca' => '11',
    9 [) O; G. N5 c! }5 }* P! a
  12.          'cb' => '22',6 P$ v8 E7 L7 y
  13.      ),8 r: j- W1 n/ H$ c: S5 A$ k
  14. );. X, \0 y+ S# i  T$ }6 ~
  15. . v9 c1 K9 t/ p/ L7 L( o" f5 Y
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);9 h3 G7 K0 O% P: G
  17. /**
    9 c3 ?' G% _6 y% w! _
  18. $arr1 = array(
    4 g3 {* S; e, C* B, n. I, f* F3 G
  19.      'a' => 'okhat',6 h- e: I% n( [1 f, N9 a6 G
  20.      'b' => 'okre',
    . H4 s. {( @& r% |5 ^
  21.      'c' => 'okarry'
    9 ]3 i" h# G7 V) W
  22. );
    , F, Z8 a5 K3 y5 t) `$ T+ D
  23.   */6 D: ~( t9 x% g# `6 E" [
复制代码

) D5 k8 p2 g5 c0 W* y: X
数组替换的时候,也是处理一维数组的字符串值。。
7 _, ?6 B* ^( a! }* I6 g, K
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php( V9 A% @# v* _% ~; |

  2. # P( G* z" }1 O  j! I$ B
  3. $arr = array(/ @( c6 Q" V3 O" b$ D, X
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    ; ], u) F/ Y' F. Z+ U" z' k+ ^
  5.     'b' => 'XXX13188887777XXX',
    ' M/ S7 A1 J% i$ E: _
  6.     'c' => 'XXXX918811113333XXXXX',0 Q: C! |" |# `1 l0 y& b* j" n: [
  7.     'd' => 'XXXX188111133331XXXXX',
    * g; w3 |* g9 N0 O0 u; o! N
  8. );# K5 K# V2 `! [& k
  9. 8 W: |" p, u' C2 \; k) d
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3+ k! `$ q& b7 R; \5 _3 U+ `- t

  11. $ D2 u- _' g& V7 p' {" v' }
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
    2 _5 L, E& b8 G
  13. 8 O2 p% K' u9 s9 O% l3 T
  14. /**8 r5 N& G/ U0 V7 v1 h+ _0 b  o" H: O
  15. Array
    0 D9 h" l9 Z' K# s" Z% q
  16. (
    1 a, B, m- c7 Q4 O- ^& N3 O: q
  17. [a] => XXX25012349999XXX- k, C) U1 y3 u" V" L
  18. [b] => XXX mobile:13188887777 XXX
    1 M( S3 J$ V: S7 f7 V
  19. [c] => XXXX918811113333XXXXX5 C+ y5 f5 W6 V7 n6 |/ o. c
  20. [d] => XXXX188111133331XXXXX" Q) [$ u8 v7 d1 m7 `
  21. ). C1 G% e0 T" _7 h) g+ I
  22. **/
复制代码

! ^/ K( Y6 W! o* i( k: g' E* _& _& `4 H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 14:29 , Processed in 0.064577 second(s), 20 queries .

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