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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
9 p% g+ j  i/ v* `
strtr()的用法:
  1. <?php
    : g# Y% B+ z8 p: a/ G

  2. " i; Y( G/ W1 a7 X: ?- k4 ]
  3. $str = "test";
    8 p! N  `. ^9 _0 F8 G
  4. * G) S3 f6 b' y
  5. $str1 = strtr($str, 't', 'z'); // zesz: l; Z2 K" _: D; t+ d. h1 F) M- ]
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    6 x, I! A9 ?4 {6 K6 N
  7. $str3 = strtr($str, 't', '');// test
    ! R& v6 }7 P1 ^& h  A4 d
  8. $str4 = strtr($str, 'ts', '12');// 1e21* u$ X$ l" A3 n0 k# ?+ G
  9. & o$ g9 r  y; `' {7 Q
  10. 1 f0 z5 C- Z( N/ f% \
  11. $str5 = strtr($str, array("t" => '')); // es# P3 y9 d7 w4 J) \
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

! Z' w0 ^: {, {
  有两种传递参数的格式,一种是数组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
) Z7 s# u/ d9 ?& r  h% p  J
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php" g, g/ x/ D* o: }% N- r2 }
  2. ' I/ |+ L! O. G2 U" _, h
  3. $str = "test";
    3 K; M0 _5 P$ L) K$ U
  4. : O3 g1 j  s/ v0 S9 Z$ t5 ~
  5. $str1 = str_replace('t', '', $str);// es# @# j3 G4 f# `  Z
  6. $str2 = str_replace('es', 't', $str);// ttt9 P' [$ b' q  v* C5 E
  7. 5 {7 `8 ]9 }) S3 Z0 t0 {. i6 q
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb( A6 ?4 j0 O- `( r* s6 f
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae7 I+ Y6 y# l* }
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
    3 C% U& g9 c! a4 `; Q) f
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee/ ~4 Y: Q0 ?$ u: K1 \. p

  12. 0 i7 }* C+ c2 |$ Q' _3 l
  13. $arr = array(0 [% ?5 Q7 ~7 F9 j+ ^. D- N- n
  14.      'a' => 'testa',% ]; S2 C- n3 p4 L
  15.      'b' => 'testb',
    # s: T8 V7 |0 x3 M- J5 W
  16.      'c' => array(1 y, Y2 N& s) |4 T+ U
  17.          'ca' => 'tes1',
    : W) W8 l* r5 C6 i  v
  18.          'cb' => 'tes2'," O1 {0 T# O. ^) N3 }8 C) e
  19.      ),7 C+ z, L4 Q$ K# T9 D8 ?$ C6 {( T2 M
  20. );
    5 Q# D3 y% I/ A: {3 ^% b
  21. ; B) T1 a& ~; d- P/ X( N
  22. $arr1 = str_replace('es', 't', $arr);
    0 u6 W' W' s7 y: G4 H4 v4 p# e- r. u
  23. /**, a  V/ u/ ?9 e
  24. $arr1 = array(
    8 W+ B! X1 X. U% {7 e4 m
  25.      'a' => 'ttta',* Y$ l- V3 o9 ?+ z( E$ Q6 x
  26.      'b' => 'tttb',. Z1 u& V. U5 a
  27.      'c' => array(
    5 x8 i5 C- E! D! W
  28.          'ca' => 'tes1',
    ' V9 I$ w$ C9 a  `5 W. z5 Y
  29.          'cb' => 'tes2',
    - V7 c. T$ R0 c$ P" e8 u  x/ a
  30.      ),
    2 R: a3 [. M1 R, m% S4 v) g2 X" G
  31. );. w8 p/ `4 d1 f% Y& f% G1 B
  32.   *
    " b8 M; c2 b$ B! S4 B& x7 ~
  33.   *0 A3 _& ?8 P9 I1 r
  34.   */
复制代码

& \* c+ C% O3 V, L# ~# T# ?% i  i5 H. U  r
4 Z: h& n4 n% o9 q% Y$ n
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
& a! Z7 }  u3 Q
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php7 }+ j$ `1 e" z

  2. & d/ g0 U* ?" S& g, ^
  3. $str = "test";
    ; X# X$ w, U  s* T& Z# a6 |
  4. . a' K8 f( C/ J! \2 h4 Y
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    1 p: L+ X! q5 j1 ~
  6. 9 d% G9 V8 Y  E5 G2 m. W
  7. $arr = array(
    8 C; z( ]) N( h6 \5 Q8 w, [- ~
  8.      'a' => 'what',
    6 [/ D  M" @+ q# i
  9.      'b' => 'are',0 R% u5 P- A0 y; e1 ]( j' {' d
  10.      'c' => array(2 \: g+ f# j6 b: `/ N% d9 d- \9 }
  11.          'ca' => '11',
    . V1 k" c8 I; B' ~% \3 v4 U% J+ Y
  12.          'cb' => '22',
    ! Y* B1 T6 V1 g* l2 e7 w0 Q! z' ]
  13.      ),
    , g7 ?* |; F' k9 C( Y
  14. );6 ?) K/ C5 ]( g/ x' H2 I* n
  15. 1 \8 ^; Y0 m* N
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);- ~7 I4 q: q: V' I
  17. /**+ k) N! H' ^6 {
  18. $arr1 = array(4 b6 z' Z9 ^  z7 F1 q
  19.      'a' => 'okhat',) I5 {  S1 y/ p- o$ K; e
  20.      'b' => 'okre',5 k$ c4 b8 g$ Y# v3 ^  @
  21.      'c' => 'okarry': I( ]* f) q+ I  J! X# K" h; q
  22. );8 a0 C" W4 J& a8 b/ V
  23.   */: S% H- o7 P5 ?% z/ {' Q- M  t
复制代码
1 }# Q% y. r! `3 i
数组替换的时候,也是处理一维数组的字符串值。。

8 [) G- o# D( r# s3 }& w
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php; R# p$ c: ?* h5 t: u
  2.   h7 z( P, R* \6 w
  3. $arr = array(
    ; g/ O! U6 Q6 x$ ~* a, c" u& y
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    # a- _0 @5 o; ~, x
  5.     'b' => 'XXX13188887777XXX',1 \7 a* l( f  j4 @7 H
  6.     'c' => 'XXXX918811113333XXXXX',1 i6 F" i. N1 O1 M* O
  7.     'd' => 'XXXX188111133331XXXXX',% V8 q0 U8 l1 ~; g
  8. );) ?/ B  i9 d' b) @( K6 C7 ?# W

  9.   B4 L: Y) C8 B1 c
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    1 A& ?8 D  ^/ {6 t5 j
  11. 2 _  I1 S9 w, C) F; {2 F
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号! z) H" F+ N, s$ N2 A

  13. : \: c  a* P" z7 I7 j/ B: b
  14. /**
    7 d( D3 _, m/ C' ?, ?$ l
  15. Array
    & ?1 Y) ?& {6 f
  16. (: T# \. Y% J' D# B: J' H) Z" h
  17. [a] => XXX25012349999XXX
    9 U4 _/ b! p$ S- x8 ?, w
  18. [b] => XXX mobile:13188887777 XXX* P$ d: P# A. a! P- N. A' r6 d
  19. [c] => XXXX918811113333XXXXX5 H9 Q/ \! i. z9 `' |# r
  20. [d] => XXXX188111133331XXXXX: m1 {2 r( G9 [3 j+ I: i7 ]' C. Y
  21. )
    ( d' D7 F* K  n
  22. **/
复制代码
- Y1 ?4 v: Q4 u! U0 K% c

: _; D6 j: H4 C7 m/ X7 X
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 17:18 , Processed in 0.056646 second(s), 19 queries .

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