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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 10:01:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  strtr()
  str_replace()
  substr_replace()
  preg_replace()

: H! i0 ?! ~( t( m2 V0 b
strtr()的用法:
  1. <?php, E! Q/ b; j6 J* d5 a9 a
  2. ( v8 w; n6 K- ~" @
  3. $str = "test";) ^/ @" _& x3 G4 l2 {- `2 u; g* K
  4. & R4 p5 F- T' t* [+ u& e- b# H
  5. $str1 = strtr($str, 't', 'z'); // zesz6 n! R0 n7 [# `1 K
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1! F3 c& Q' }/ P. O
  7. $str3 = strtr($str, 't', '');// test
    1 \  L7 \; w. j4 y7 s1 l1 W! B' C
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    . J' L0 o" m& ^8 e2 T: E6 ]
  9. ! h$ h8 R/ j4 B& g# |0 b! M' M
  10. 9 c% Y. Z1 L) {; f' F
  11. $str5 = strtr($str, array("t" => '')); // es' w2 c! I8 M7 d# Q7 p: _
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
8 f3 y% S) S) I# L6 a0 \+ w8 {; r6 B! ?
  有两种传递参数的格式,一种是数组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
! E7 B! g) {& ^' {  W: Z4 h
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php
    2 h' H6 Y5 T$ C
  2. 4 G& w2 R+ B/ b' _' d& Y8 v
  3. $str = "test";4 q  [" l! n! W
  4. ) U3 e' G5 Q0 x( v8 n3 m6 ?! R, K
  5. $str1 = str_replace('t', '', $str);// es; q- a& Z1 m% T3 R: q6 \
  6. $str2 = str_replace('es', 't', $str);// ttt
    5 {+ E! e" \  _2 Q
  7. 2 v' Y1 j4 R9 b% ?
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
    ' V9 p8 f" O: z: ?. O8 y
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae4 \) I9 t8 H9 R! e% i) }
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
    ! r; G7 H* G5 n% [) u, r% q, h/ j
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    5 U2 L. J* g, F

  12. ( D& Q: ]2 G/ n
  13. $arr = array(
    7 \) w$ a* |3 v
  14.      'a' => 'testa',
    $ c  M: s* E4 b* y' w# |0 n* q
  15.      'b' => 'testb',7 y4 b+ N* |2 e
  16.      'c' => array(- Q& }. f' b* k% V6 W- j! Y9 ~
  17.          'ca' => 'tes1',
    / h; R: x1 a! i3 W# X7 L: l
  18.          'cb' => 'tes2',
    0 V5 U- r. y+ ?( \- b' A/ B
  19.      ),  w6 A' F; a4 T4 ]  Z) u3 x% O# F
  20. );- S7 F6 d3 @. i$ |1 R

  21. 3 {5 s& U0 S3 [, M3 R' l: F1 m4 T5 F
  22. $arr1 = str_replace('es', 't', $arr);3 o# K, ~' d. H2 }% R
  23. /**
    # j1 V& y$ e; X8 C- W
  24. $arr1 = array(
    4 w+ j3 R7 }' A
  25.      'a' => 'ttta',
    5 s, r' N# H4 s. z
  26.      'b' => 'tttb',
    & H0 h( K( H# |2 |2 c
  27.      'c' => array(& s! [( `  {( |3 p7 ^7 ^0 Y
  28.          'ca' => 'tes1',; l3 L7 t' X9 H7 G% L8 ^$ Z. N
  29.          'cb' => 'tes2',
    : v7 h+ B3 Y6 h! C
  30.      ),  s; a$ K0 J$ a8 `% P: K( m1 R
  31. );/ S2 }% E( x% n( n$ f) o1 R' m' W
  32.   *, Q! @6 @7 b3 e9 _1 e% ~/ ]0 H/ F; S
  33.   *0 S4 m* u! R  k* ]
  34.   */
复制代码
" K8 {: u; J2 j# {( b
5 d" J/ [! G8 b" y
. S6 J6 h0 [( ^% j
str_replace()在使用上比较简单:
  字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
  数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。

4 c  |+ M% y/ G( c( P( z( ?& w
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    2 U+ ?4 W/ K( Z$ L! l' e7 `

  2. ' ?1 q1 {' Q* V0 U8 V  v
  3. $str = "test";
    7 w9 m2 B9 e1 l: o% _& ~% P- k
  4. . @9 m  K) J' V* u7 g
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt- \7 E' l8 M( j) q& ?6 e& l

  6. 0 E9 f# G, V" f) P7 \" u( [
  7. $arr = array(
    9 I3 O, P% I7 w
  8.      'a' => 'what',1 M7 f  w7 U% a1 p4 @, @: N
  9.      'b' => 'are',5 Z0 S( U; `' _7 |/ g
  10.      'c' => array(! w9 L  `: J$ ^5 i
  11.          'ca' => '11',+ s6 K0 Z/ ]9 q* W8 u
  12.          'cb' => '22',- a) }' f/ a/ O$ ~! W& @9 }" H0 e
  13.      ),
    7 l' z4 A2 e3 Z, R+ z
  14. );7 M# @; R. P+ g* J  |

  15. ; T+ u: g) k  D9 q5 J  N4 |
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);( l2 @, m% @" T9 o0 |* u
  17. /**
    " d) T0 Z! m5 O
  18. $arr1 = array(8 f* k2 z2 L1 w
  19.      'a' => 'okhat',3 _8 a. F: N" {* I
  20.      'b' => 'okre',8 O$ H% B5 T1 W+ }
  21.      'c' => 'okarry'; h$ R, `( N' M4 Z3 q
  22. );
    : _4 d# V( G. o
  23.   */
    8 q( b4 _7 {7 h6 R. L  X5 [% Y( I, d
复制代码
" |; T( t1 [, z; L" k  `& H" `( A
数组替换的时候,也是处理一维数组的字符串值。。

6 w, r; L$ }1 _" i) C, c% s
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php
    7 H2 \) j, @( a, t; X

  2. - V. ?. o' V' D. s
  3. $arr = array(
    ; I) I/ z& f9 p% J2 m7 q: I
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头
    5 k. D2 z: t7 i1 T, `
  5.     'b' => 'XXX13188887777XXX',
    5 o/ l( U8 H3 A" t* z! Y
  6.     'c' => 'XXXX918811113333XXXXX',2 t/ U& |. I4 H
  7.     'd' => 'XXXX188111133331XXXXX',0 e* t6 m6 [1 y2 W. p  s5 {  y
  8. );: n) W- G" x' A8 @2 ?: h. \/ D/ h! ]! X

  9. * a4 e1 p8 t6 p2 q! U! `2 v  D
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$31 x; y" T( V3 C9 B* f4 a# o  N
  11. ) |* [) Z0 T6 \, B' x; r! W1 s
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号0 E& c# [3 T$ K! `# d% ^9 j& o& c

  13. * q5 G# \' `) n+ J( y5 W
  14. /**8 F: a' B! @- i9 C/ M7 {
  15. Array7 v# A8 a5 U" @  y
  16. (
    , o5 Y/ ^% u1 ^/ i/ B# m6 \
  17. [a] => XXX25012349999XXX
    " R1 }# a" [$ i8 U
  18. [b] => XXX mobile:13188887777 XXX( _" v0 [3 Q/ L. g) A
  19. [c] => XXXX918811113333XXXXX8 f; w- }- L* b' [
  20. [d] => XXXX188111133331XXXXX5 O2 _2 K9 o' }
  21. )% j$ G1 S7 v5 w( U* L
  22. **/
复制代码

& }& B% d" U* M% t2 B' V6 G9 D6 ]7 H' ^7 `& J/ D( t
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-3 01:18 , Processed in 0.127296 second(s), 19 queries .

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