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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
( B! u" D# Q% |/ d! U* D
strtr()的用法:
  1. <?php1 u9 T$ [4 F0 w
  2. 4 ~% [7 ^& x) E
  3. $str = "test";
    6 M- f1 s! Q/ @' I) U7 t! F) Z$ j
  4. , u' _2 @# i2 [0 w2 t% W" d& J4 V! C
  5. $str1 = strtr($str, 't', 'z'); // zesz
    % h1 h* n4 e4 e6 T/ k
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    2 |% L$ F) A- y# ~+ ~% j, g% S! {1 ^) V
  7. $str3 = strtr($str, 't', '');// test: R0 H( s- P5 _- z& D  W% a
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    : w' T' P" d5 w7 m* i* r
  9. 2 a  G) U4 i; x, q9 g: C# i. Z
  10. : W  ?4 b' s7 d& y- y
  11. $str5 = strtr($str, array("t" => '')); // es
    $ ^8 r. F1 g0 o( R5 h) `0 F6 ]
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

! M" f5 [9 m/ P: t7 a: I2 n
  有两种传递参数的格式,一种是数组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
$ J$ L& H$ n9 ?. M" O1 U
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php/ a4 ~* S/ d" t9 z* F
  2. , b# S. Q: y( F8 G1 c) P) x# v/ o
  3. $str = "test";" S; b: R. w- d4 M, v4 z9 Z

  4. 4 p( Z7 W, N/ u$ c# T4 [8 A2 U! T
  5. $str1 = str_replace('t', '', $str);// es
    ! X  B  Q, `/ L, N3 f7 p
  6. $str2 = str_replace('es', 't', $str);// ttt
    * Q3 q( \0 X; y1 B
  7. 8 C4 ^3 l' N4 f9 M
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    0 C- s  f! t9 @5 n8 p5 E
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae9 d" X7 D) K: l- `
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
    1 G+ e! N0 I# i9 q& Q3 ~! q
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    # \% F% b! [, R/ h4 \6 \; ^
  12. , k/ E: d# g% V  q" }4 e( R
  13. $arr = array(0 Q% M# t1 j  ~6 l' }7 b! g, D
  14.      'a' => 'testa',
    6 ^0 E$ c) X; G' I) L, ~
  15.      'b' => 'testb',
    $ C% E2 }1 i9 Y6 Z6 w" X! ~
  16.      'c' => array(1 a5 {' N! r3 r% H' v0 }, w
  17.          'ca' => 'tes1',
    $ N( v2 M3 I' I' ]
  18.          'cb' => 'tes2',
    & y- {7 f: E# y9 N% @1 c8 @- i
  19.      ),
    0 ]/ ?6 G% M- S, d
  20. );
    2 ?5 `5 `- Y5 ?" R' p% Q

  21. * J1 [( V$ O7 @" n/ s, M; a+ a. [
  22. $arr1 = str_replace('es', 't', $arr);! G8 z+ f3 m. P% o* d! K& h
  23. /*** r; Z2 q; k, O/ F0 n! s
  24. $arr1 = array(
    3 }/ a2 D( A" d3 ~! B  w
  25.      'a' => 'ttta',7 C/ r! b) R; e
  26.      'b' => 'tttb',
    # ~' t- g8 e/ T' Y; {% F$ y9 R
  27.      'c' => array(
    6 y8 [1 r) N+ P' M. q  b8 A# g% S" \
  28.          'ca' => 'tes1',$ _4 l. V6 r6 b7 s; m9 \
  29.          'cb' => 'tes2',8 L' u6 {1 M; y* g
  30.      ),
    ; O' s$ k6 }( o4 R! `, ?+ Y  y- ^
  31. );
    8 S- b( {9 b) \" B/ P$ c% ]
  32.   *6 R+ k) e2 U' D3 Q; v6 |) T) L0 s8 S
  33.   *
    + h+ L- R& w9 \4 v, y" W' l* A
  34.   */
复制代码

' X; e( G, g% w3 l2 r$ ?2 K' S
% ?, Y- E; c: l7 Y% M) n
" \' S5 o( d7 P+ C4 _0 W
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。

& l* |: e4 M9 J0 a0 l9 [
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    1 R( W* q9 w6 `
  2. 5 f9 G2 T; S' w1 i) ^
  3. $str = "test";5 z" E3 d. n# u

  4. + S$ x+ U, O1 U& Z8 o
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt8 C+ ~7 k: w* ?* X5 p4 g$ _3 |4 m

  6. - Y4 ^! K2 t! T' G# T# r; O& J
  7. $arr = array(  [" l4 B* u3 i( E; i, E3 o& Z
  8.      'a' => 'what',
    + J- N, j2 |3 g) T7 d
  9.      'b' => 'are',
    ; n/ n9 f# G) ?* h* V- P' j7 u
  10.      'c' => array(
    3 [$ F, l! L" h% R
  11.          'ca' => '11',# a, k$ t! [8 e" ?- t
  12.          'cb' => '22',
    1 A9 A! X* D+ y1 X! ]9 r
  13.      ),- Q( v) S  z7 E- {) P: F$ a
  14. );$ C% f$ U/ }6 P0 ^4 b& W  t
  15. 4 h: A8 {1 y- K+ O
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);0 N  ~! p2 q& i  a
  17. /**
    5 E/ e, S. B  |4 D; C
  18. $arr1 = array(* C$ O/ l1 q1 z& T5 w
  19.      'a' => 'okhat',
    5 D/ T8 L9 a' Y' K! Z
  20.      'b' => 'okre',
    . u& q5 u9 n. P- l
  21.      'c' => 'okarry'7 i$ z. k( A6 ?# U# I! a9 ]
  22. );6 h5 ?! U( T6 p# J6 J
  23.   */
    % b' {. @$ Z* i) V5 m
复制代码

# T4 R  i  t- l+ U* {
数组替换的时候,也是处理一维数组的字符串值。。

+ k+ J+ ?2 h% L/ E- ~8 h  b3 O
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php1 p6 Q& p  P5 z( z2 _) p$ I0 ?/ B1 L

  2. 1 n' H& h2 ?) Z/ w1 C) Y
  3. $arr = array(- P8 y4 X! r2 b$ Q) Q1 {1 i0 a0 ^
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头& E; J' Z; r+ S- e/ i! ]. X9 `
  5.     'b' => 'XXX13188887777XXX',
    / h: E  ^: P, {
  6.     'c' => 'XXXX918811113333XXXXX',
    1 T4 U" R! ^' Y$ }
  7.     'd' => 'XXXX188111133331XXXXX'," G, Q9 d* E, v5 o5 H5 z! `
  8. );6 g6 Q% d' U. Y4 b8 g; c# j( ?+ d

  9. ( Z! V% n/ t) r" G
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    + {! q. x, N- S9 p5 S0 R/ N

  11. % a3 F5 S" t' j  R5 Z" _
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号: Y9 Y1 d7 g$ h) a$ I
  13. # x8 H0 Y' }/ ]  j: h+ c. ^9 z
  14. /**2 n8 ~" ]7 N  ?" H' S  o
  15. Array; B9 R: y- m( |2 |
  16. (: O4 ?3 H7 Y: H# s6 x; y" p
  17. [a] => XXX25012349999XXX% Q3 O. b  ^* [4 y" @! K) G
  18. [b] => XXX mobile:13188887777 XXX
    # T" Z. h  s. g+ X) d! b: N" k
  19. [c] => XXXX918811113333XXXXX
    9 x; B5 {; e& r- G9 e7 K
  20. [d] => XXXX188111133331XXXXX
    5 P! K3 {( J  K
  21. )6 k0 G. I. h; `6 b2 d; ^6 `
  22. **/
复制代码
3 t9 I, Z3 p. c) l1 [

9 Q! {& ?6 M. h- B0 v" r& P2 T
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-21 05:21 , Processed in 0.056244 second(s), 21 queries .

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