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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

8 f; G, v- j: n4 k" N
strtr()的用法:
  1. <?php9 M, r' V; M; i6 Z9 K6 s
  2. 7 S- j0 x; T( a- y. Z) c( m
  3. $str = "test";
    + L& G$ `- @4 l
  4. # w" B; h! n# _) Y" W+ R8 Z- |
  5. $str1 = strtr($str, 't', 'z'); // zesz0 O' c6 V4 A: A
  6. $str2 = strtr($str, 'tt', 'z1');// 1es1
    ' g, s  M& t* D$ ]! I$ S6 o5 l) ~8 P
  7. $str3 = strtr($str, 't', '');// test
    4 s: r+ \% V. [0 ?
  8. $str4 = strtr($str, 'ts', '12');// 1e21
    4 i6 s$ l* y+ P7 {

  9. . z, a, g& ^6 F" Y0 H
  10. & C# ~" ^4 o! Y
  11. $str5 = strtr($str, array("t" => '')); // es
    " {; V9 t: V/ j: u6 _
  12. $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
& O  q+ T1 I% J$ ?8 u& Q; S
  有两种传递参数的格式,一种是数组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
3 z+ n; ^/ x% I9 H: ]3 m( A6 t
str_replace()的用法:  mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
  1. <?php* i8 e- Z$ n) N5 L# e; s

  2. ) z' T  V; ?! O/ v  ^
  3. $str = "test";6 R5 Y* r) ]9 M7 \# I

  4. % z: c& e: ~8 @8 G0 X/ Z; J
  5. $str1 = str_replace('t', '', $str);// es& w- s9 h/ k! J$ R  d  w
  6. $str2 = str_replace('es', 't', $str);// ttt4 X+ v! G) C3 w7 J( p

  7. 2 q! S. H% `- r
  8. $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb( R4 \; \5 r0 M' S. R; X- r
  9. $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
    , ]9 i' G: a9 s% J1 z  w
  10. $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa( I' @7 V) T1 T/ I2 p
  11. $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
    7 ^9 N7 \7 K% Q9 y- D8 C+ h0 M
  12. 9 X: G( g. c* ~! O
  13. $arr = array(
    3 T3 {( @- W' @( P
  14.      'a' => 'testa',4 \, J7 m) d! K2 y$ R( Z' o7 Z& e# C
  15.      'b' => 'testb',7 I% A) X* t% ^: ~5 m8 a
  16.      'c' => array(
    + B0 [/ z5 p0 S! a
  17.          'ca' => 'tes1',' b& O3 Z! U- l2 s
  18.          'cb' => 'tes2',
    " G) P- A" |# a8 S6 j5 }
  19.      ),$ e& @. _% U( D" M# E- _
  20. );
    6 N7 Y. @  n( Q) v/ c$ P# l. [

  21. - F& n# z& j) b1 K- }( w
  22. $arr1 = str_replace('es', 't', $arr);
    9 ~6 N( x( B" `
  23. /*** f+ @2 r) P0 U" D3 @% x" N% O
  24. $arr1 = array(% c9 D! u- i3 y' [/ X
  25.      'a' => 'ttta',9 [1 J  i# K8 ]
  26.      'b' => 'tttb',
    4 z: H6 s3 c1 C+ I
  27.      'c' => array(
    - f1 t% t" Q8 |/ a& v  e" I" ?* w
  28.          'ca' => 'tes1',* [6 B1 t0 K& V! ]
  29.          'cb' => 'tes2',
    & l" {/ d  }* k( |3 x( R" Q1 p
  30.      ),
    - ^1 X+ ?: N$ z* A0 [4 g
  31. );
    + X7 X' |! `; A' r, B$ S* k- l
  32.   *
    # `/ W  V. }. W, a" V7 f. P
  33.   *
    , K  A4 T/ B. Y& M
  34.   */
复制代码
1 }4 v, |% x( q  e% W% ~' x' e
! ]/ [; N6 T: K. V) c

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

8 Y6 l- ~3 T% M
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
  mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
  1. <?php
    8 c- f- l1 q) ?/ F5 `- Y6 n
  2. ) e: J8 N: N) V- W  R
  3. $str = "test";
    . ?1 R! D1 u/ B8 [+ \: `6 J% g/ M4 E
  4. ) i. C- l0 X" ?0 B6 E
  5. echo substr_replace($str, 'zzz', 1, 2);// tzzzt
    3 z7 m# z5 J1 c4 J: d
  6. 7 l, W/ a$ G5 |2 S
  7. $arr = array(5 m$ d: W, ?' o: b" }+ s9 M, }, W4 ?
  8.      'a' => 'what',6 l! T! @7 d. i1 ^
  9.      'b' => 'are',/ n/ D; o" y! E2 P, I! ~* E
  10.      'c' => array(
    0 h( B) e+ f1 u0 z
  11.          'ca' => '11',
    0 f5 |% N( R9 A% j/ d
  12.          'cb' => '22',1 t# E- k& N+ O& R/ q' [. \
  13.      ),/ i9 Y3 k, \3 [
  14. );: Q6 ]: o' x4 _& S1 o
  15. 8 Q& C. K8 W+ v- Y- m5 F- M
  16. $arr1 = substr_replace($arr, 'ok', 0, 1);7 o# ^; i5 @* O8 [
  17. /**
    8 y: w) A  r( I; j' i
  18. $arr1 = array(
    $ {3 s  L' W2 R# s) U
  19.      'a' => 'okhat',$ i, ^; l5 c. Q, F9 m" g
  20.      'b' => 'okre',; d) }- z5 S* ?) F; i; u4 r' x
  21.      'c' => 'okarry'3 l* s* C. V9 P/ d4 ?6 v' w, f
  22. );
    4 B* r4 [( p# S+ Y4 a0 D+ h& r7 d# {
  23.   */
    ) M# M3 U8 B' k- Q! l0 ]! U
复制代码
* B8 n4 }5 f1 a" g- N5 F
数组替换的时候,也是处理一维数组的字符串值。。

$ Q9 ]/ i$ M" @- q  ?
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
  1. <?php3 G" g7 ?' A8 l/ Y' W4 Z2 {
  2. & h$ o8 }' h, r+ ?
  3. $arr = array(/ L$ _- N' W+ {& ^8 @1 v' M4 |
  4.     'a' => 'XXX25012349999XXX',// 不是以1开头  h6 `2 j: @% o, u
  5.     'b' => 'XXX13188887777XXX',* V- [' G, t7 F; Q
  6.     'c' => 'XXXX918811113333XXXXX',0 M, H; _; P) ?
  7.     'd' => 'XXXX188111133331XXXXX',! S/ l+ Q5 Z' @9 X4 A# Y/ ~! {
  8. );
    $ ^% B  c! o* `7 s4 w- |, p% \4 o1 G

  9. $ }. C1 N- ?+ t8 A
  10. $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
    $ D: f! c# F3 U& B3 z

  11. ! ~8 _+ g! ?5 X3 t. v0 D% F
  12. $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
    4 p! x( p$ _4 A3 k% r
  13. " r: v. T5 t$ D/ A: e
  14. /**1 T) y( r; G) z' N6 ]
  15. Array: d+ v! B7 x& }- C7 @9 E
  16. (
    9 }0 {6 b0 J# T9 \9 r8 T; |) O2 n/ b
  17. [a] => XXX25012349999XXX
    - p: ?' V: f5 G) M( l6 G0 b1 [
  18. [b] => XXX mobile:13188887777 XXX
    4 R: x2 {- u& `$ L
  19. [c] => XXXX918811113333XXXXX9 y2 Q7 `1 M% B+ y8 ?
  20. [d] => XXXX188111133331XXXXX
    4 F  K0 Y& ^$ }
  21. )
    9 m4 Q* @8 c" b$ h' K9 t) g7 k
  22. **/
复制代码
- o9 W. h) h1 _% f

  z& i  W. K  F# |
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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