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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()
* N+ W7 i1 C( r- [; g% o& w0 Q! k
strtr()的用法:
  1. <?php% f6 E, C4 @, ]! D% `/ `
  2. * D4 H" G: _$ `5 b
  3. $str = "test";
    & G% k$ ~5 p! e0 v' B- B' a" d

  4.   p# W9 Z3 |" ]4 }/ g. Q  ~% g
  5. $str1 = strtr($str, 't', 'z'); // zesz6 I% D& j  F* P: |; A
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1- t8 j) `6 M( o/ `! X- Q9 Y
  7. $str3 = strtr($str, 't', '');// test: ?% R" B6 t& G$ _/ ~% s+ X# K
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    & Z5 e2 X! ^$ Q* Q! A  M

  9. ! c) L% w3 F4 k# a

  10. 6 V$ }) Z, G' l8 W* j
  11. $str5 = strtr($str, array("t" => '')); // es
    6 I6 L+ g5 ]9 l7 e+ H1 @) ]3 X5 Z
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码

1 v) H+ Q9 B9 W8 R
  有两种传递参数的格式,一种是数组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
1 e4 K+ _+ A/ R% w. a. j. j
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
      U! ?* w" G  K* t; V7 K

  2. & q# Z# @2 o) z9 M9 ~) o2 b1 U
  3. $str = "test";* f( U" j3 x/ l3 V+ J$ ~
  4. 8 l* {6 O) ~% E4 M: R1 ?; W9 D
  5. $str1 = str_replace('t', '', $str);// es
    5 R# b, g1 |* B, [
  6. $str2 = str_replace('es', 't', $str);// ttt
    : V( K. G3 R2 X: f2 e/ |8 {& w

  7. 6 n  ^. K3 M: k, ]& i
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    1 U( t( _$ E# t) G% J) @" s3 R
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    . ^4 Z8 N' d; }2 T
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
    - I0 n6 Y1 T; V; G4 U6 O* L
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    # M, ]0 [. x. b

  12. ) l$ Z7 c0 V) P3 J7 J% n- z2 T
  13. $arr = array(
    : K4 J% {8 d7 `2 C
  14.      'a' => 'testa',
    ; ~; @& I! h- K6 a
  15.      'b' => 'testb',3 y$ s( u5 W& O& P3 e: B3 a3 t8 |0 O
  16.      'c' => array(# o5 |5 r- F# j- U. D
  17.          'ca' => 'tes1',4 f5 K8 d6 l% v8 x6 m+ W0 H( D: M! K
  18.          'cb' => 'tes2',
    , e$ R3 e& K% x6 m* M8 i
  19.      ),& P$ I1 f1 J; |. i) t
  20. );
    4 w. g# I, [  U, }/ z% ?

  21. ' x( i) ?5 y" A  _
  22. $arr1 = str_replace('es', 't', $arr);2 ~, Q5 R3 l$ g, |$ [1 ^, y
  23. /**- }0 t8 [! S# v2 }8 A/ E2 `
  24. $arr1 = array(/ ?7 Z8 _" A) N4 ?
  25.      'a' => 'ttta',# k4 ?' r) w: A( s
  26.      'b' => 'tttb',
    . U& R) K3 ^8 ~  [$ d: t2 F* k
  27.      'c' => array(
    ' v+ v) }5 J; D
  28.          'ca' => 'tes1',
    & H) |, Q& @  o: F4 i* i
  29.          'cb' => 'tes2',
      Z3 @' A; n/ U8 ]# @9 \
  30.      ),
    " d' g1 T1 V5 A3 Q7 A+ f
  31. );& J5 c8 m/ {$ n3 J4 h, O4 b6 e, s7 j
  32.   *
    9 |, K" W( n( t/ O2 a6 r- ^
  33.   *: k* e3 n4 a8 m# `: ^7 L5 b
  34.   */
复制代码
) K" w2 i' D/ g+ D

' F4 q1 v$ x) e% ^" @; t4 K& [
6 T3 h# R5 z  X* x. Z9 a
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
( S- {9 l* O+ T2 y
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php# w# l0 [+ M6 z( M' I) h$ f: F8 L
  2. # x( Y7 b) b. Z( W
  3. $str = "test";, r8 j* ?5 v2 [3 R3 K# m$ B- V
  4. # p0 p$ N- R' R. t5 H
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt1 U, n/ |+ z0 J/ [8 N. S, \

  6. $ Y2 X$ l3 N2 F' ^; K; `
  7. $arr = array(
    + o: _$ B7 S8 M
  8.      'a' => 'what',/ d# g8 T9 z/ `; x* C) a
  9.      'b' => 'are',
    # ^$ i5 q: r7 `* a, z: k
  10.      'c' => array(- D9 w' ~+ w; B$ \5 I
  11.          'ca' => '11',8 B* I5 t- p0 C/ o( b
  12.          'cb' => '22',
    ( X# j! X# s4 N9 X
  13.      ),
    8 \1 o+ i2 Z+ y9 [: T! I! v4 K
  14. );6 f+ R" {& k+ e" c) l

  15. . T, ?# E/ ^- n9 y( g8 |' n* g
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);7 M% x, z8 a. r; |  {5 |, M
  17. /**& w: P, H0 y# F' I& r, ^
  18. $arr1 = array(4 o1 I: U3 I, }, o, E& e' [
  19.      'a' => 'okhat',
    & R" j: }! h8 c( [+ L
  20.      'b' => 'okre',7 d, ?. w8 [7 [, o. s4 `
  21.      'c' => 'okarry'
    " _5 j6 A6 d/ S% C& e7 Q
  22. );
    - l( m0 l, Z, o+ k
  23.   */: w+ o$ i! \  A7 I) x
复制代码

1 m- A6 `5 h7 F/ A- z6 ^+ r  U4 t9 G! ?
数组替换的时候,也是处理一维数组的字符串值。。
) Y4 j9 @$ U3 ^$ W5 D
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php" a- M5 b: @* ?3 ~( z% }8 w: `
  2. 3 v( `; G: V- a0 a
  3. $arr = array(2 u2 v+ U+ z# m
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    6 z! o4 Z! G6 A
  5.     'b' => 'XXX13188887777XXX',/ h4 z6 q: @$ p% @; l1 @
  6.     'c' => 'XXXX918811113333XXXXX',5 s/ v! W; g( x7 S0 n" I8 ^
  7.     'd' => 'XXXX188111133331XXXXX',
      L' @  m8 A, u+ ?) u
  8. );
    3 i8 Z) ]8 |) G7 f9 \) \
  9. 0 M8 Q' t: a: {+ T- N6 d- Z
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    6 K# |, J+ H: O, V# l# C3 D. E+ v, H
  11. : c7 n) Y) I2 |: d
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号6 H/ D, L9 M# j, B3 D( L$ ]4 A
  13. ; @- n+ V* q0 U9 W& z% |
  14. /**
    / p1 v/ G5 G$ x+ n4 Z* H& \, m
  15. Array
    : c7 O' T: i% O& T
  16. (0 j, P/ Y# l" Y# ]- m
  17. [a] => XXX25012349999XXX
    9 P7 R8 _+ K# X7 t
  18. [b] => XXX mobile:13188887777 XXX% Z# S& s' o! t
  19. [c] => XXXX918811113333XXXXX
    ! P( I7 m. m, x
  20. [d] => XXXX188111133331XXXXX
    4 x- O8 U1 l/ }+ @. L2 m: L
  21. )
    " U5 A8 A8 r9 f! Y
  22. **/
复制代码
7 T  ?, ]8 q+ K7 H% f7 t- h

3 o4 Q2 _% ^6 T0 _
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-20 16:46 , Processed in 0.131625 second(s), 20 queries .

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