cncml手绘网
标题: php字符串替换的几个函数 [打印本页]
作者: admin 时间: 2019-1-22 10:01
标题: php字符串替换的几个函数
strtr()
str_replace()
substr_replace()
preg_replace()
" t; V* _& g( e; k" ] J; |8 Bstrtr()的用法:
- <?php9 g* U$ w/ \6 x, q( G7 h
: S0 i7 I: l j3 ]- ]- $str = "test";1 t7 ?3 h% X. ]' D
- 2 N: h' }$ I" i& d
- $str1 = strtr($str, 't', 'z'); // zesz
7 g2 s5 y. Z( G. j* D! t8 D- E; x - $str2 = strtr($str, 'tt', 'z1');// 1es1
6 Y' Z4 U3 z* E& y2 ~- v - $str3 = strtr($str, 't', '');// test6 L$ d5 v7 Z5 H* w
- $str4 = strtr($str, 'ts', '12');// 1e21* Y2 ~, H' X+ _5 ^8 y
, O4 |% V# i: h: Z2 L( a9 A
$ d! W& ~% M9 z) x3 V1 h) D- $str5 = strtr($str, array("t" => '')); // es
}( i8 o- L) Y - $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
/ D/ ~" N T, i& p8 D 有两种传递参数的格式,一种是数组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
; i9 J% Q7 n& |2 ?6 Pstr_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
- <?php
+ |9 N0 b4 Z/ A1 b @ - ' w2 j4 K/ |% r/ M# @) b' A- u, P' L
- $str = "test";
+ Q( j( d) L. D5 e3 y/ s' p
5 \3 x; J: x7 j6 C- $str1 = str_replace('t', '', $str);// es! g' l$ l6 @, f+ }
- $str2 = str_replace('es', 't', $str);// ttt/ S+ a9 ^, o5 s% g7 ?
- 7 U: U, i! J9 _$ c$ a# y
- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb" C7 G: w8 n) u/ f
- $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae1 z& Z( M7 g6 r- ~6 P* ^
- $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
4 O5 e3 |2 {$ E* } - $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
# E" h3 ^6 r5 A: P! l
8 j5 _0 T, |" _, C( Y" Y- $arr = array(
# M! Z1 P% n/ @6 o0 s& r* X! g - 'a' => 'testa',
2 {) P# {; r- w1 v8 X3 X# N8 h1 ~ - 'b' => 'testb',: I$ E8 X: i$ W/ q1 T1 s5 U6 x
- 'c' => array(8 I+ r; m5 W$ ^- c6 P
- 'ca' => 'tes1',1 b6 k: r3 N- N+ @
- 'cb' => 'tes2',& d! U" K B; n' _$ n2 F; j6 N
- ), D% F) G Y; {* ~7 p
- );9 X4 ~5 w3 K8 n. H3 C8 ]
- w! i- M- g/ r* i5 z' Z
- $arr1 = str_replace('es', 't', $arr);
# Y' j. z+ _! `: F6 Y' O* I+ q, _ - /*** _; C2 O+ z) @
- $arr1 = array(
" `- Z- o2 {; U9 s J - 'a' => 'ttta',
6 i1 x5 T8 [) [0 y& c& W - 'b' => 'tttb',
% r/ o {0 ^' j! G4 V+ W6 B - 'c' => array() D- T! _$ p0 H) X5 R7 |8 ~
- 'ca' => 'tes1',
M/ @5 i* G/ L6 i/ j3 j" T - 'cb' => 'tes2',1 s4 M7 d: ]: Y5 Q$ w* r2 J9 `
- ),8 {0 w3 l! c: J) V' F
- );- g8 U0 d5 O7 w1 D3 t* U# [
- *0 _4 j) E2 x2 H! H3 E
- *# x" ?5 m3 j9 y' {! w" ?; l+ ?" _6 G
- */
复制代码 % k7 b6 H1 @ L+ T3 [& q" U9 J
" @8 `* M6 S& X9 I8 [& b. \" c5 V! W' w+ {
str_replace()在使用上比较简单:
字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
! A$ S" \; T6 G- R. ~substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
- <?php
! x6 Z) {3 Y/ ?' l. B - 7 G G! M, V E+ m, R
- $str = "test"; \, \' D5 {; v
# H+ h5 \' H W- echo substr_replace($str, 'zzz', 1, 2);// tzzzt( d8 s: q2 Y/ q) [. }
- 4 c% M' y1 b% \, s
- $arr = array(
3 W) g, C9 n# I- }! @, }; u - 'a' => 'what',% F) T! X6 z; N" F7 y4 _2 U( [) z
- 'b' => 'are',
# ^& K, H8 V- f- g4 m. W - 'c' => array(
t' ~/ X e. c0 c, b' U* W - 'ca' => '11',
, I% U$ ^" ]0 b! j% x9 [/ l4 D - 'cb' => '22',
& i% l( Y3 G# u+ _ - ),
) f3 w* V* {) U6 }0 x - );
0 [- {$ P* t. h; {4 O - 2 N- a# V3 }. ~2 Y
- $arr1 = substr_replace($arr, 'ok', 0, 1);" F3 s- t2 Q E: V5 W: g8 Q
- /**
2 L+ J1 b$ Z4 n( j - $arr1 = array(
+ U. C/ q- t# `! ~ - 'a' => 'okhat',. s& b# I- E" r9 B( a' L. d
- 'b' => 'okre',3 Y1 v1 O0 X& G% p, q* o8 j
- 'c' => 'okarry': ]: e- f7 R( _- g: B( o1 w- O0 O) U7 D
- );! S: f! Z0 k% m5 _5 q* V o
- */3 V' j, T+ k( ^
复制代码 4 u) i$ b7 `, n& V3 B/ A
数组替换的时候,也是处理一维数组的字符串值。。
: [; b. Z( i' j2 \: Q6 A- g( I
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
- <?php& e0 n+ M1 R* @3 G
* e; j& |1 p% c+ B3 t) j x- $arr = array(
" G# f h4 g( r - 'a' => 'XXX25012349999XXX',// 不是以1开头 I/ S9 n7 t7 U9 C. y8 v( X
- 'b' => 'XXX13188887777XXX',' A c. F z/ b0 `
- 'c' => 'XXXX918811113333XXXXX',
' P7 B9 H+ X N { - 'd' => 'XXXX188111133331XXXXX',
+ ^3 X1 Z- r5 F% ?; B# @ - );
# r. U) A" G' M' A
+ V' {3 p$ I+ M- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$31 Q2 ]( N4 i/ c5 ~7 o
9 Y' `$ U$ D2 R4 u+ q0 g5 E( x: b- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号& ?4 p" i/ I# v0 O
, T) O( W* }! J3 A0 |- /**
6 y) O7 j8 r! S5 y - Array
+ O6 r' W5 h8 V7 L0 K - (
# `( f' p3 `0 \8 W+ v/ U3 h - [a] => XXX25012349999XXX
& {& F% O; Y! K$ _ - [b] => XXX mobile:13188887777 XXX/ m# |5 y% A" C+ g& X
- [c] => XXXX918811113333XXXXX" `1 `& O Q$ E
- [d] => XXXX188111133331XXXXX
$ k; U( ^ Y! |2 H- |5 O - )! S/ @' z) Z5 Q& \' s( L
- **/
复制代码
2 A: `: j9 p3 _5 `* L
* g5 u& U" }# S0 [ R
| 欢迎光临 cncml手绘网 (http://bbs.cncml.com/) |
Powered by Discuz! X3.2 |