cncml手绘网
标题: php字符串替换的几个函数 [打印本页]
作者: admin 时间: 2019-1-22 10:01
标题: php字符串替换的几个函数
strtr()
str_replace()
substr_replace()
preg_replace()
( F8 }8 i% T% k, _! R* s
strtr()的用法:
- <?php
e {3 y% S& e2 l - 8 G* @0 Q9 p% ]- s. Q
- $str = "test";; I: _' k6 O* C# a. V
M3 e3 X; d3 f p8 D2 H5 o- $str1 = strtr($str, 't', 'z'); // zesz4 q5 n6 q8 M5 |1 B9 N# o7 J
- $str2 = strtr($str, 'tt', 'z1');// 1es1
* _5 R* D* r) H/ @' P, E( }! j - $str3 = strtr($str, 't', '');// test& N3 G: _& H- @) T; g& l
- $str4 = strtr($str, 'ts', '12');// 1e21& @- E2 t7 g+ l, E7 }% d
- 1 F4 ?) C9 N: i5 h/ {) |
- 2 B( r7 ]5 N+ o- A& ?1 b/ e8 t# A, I
- $str5 = strtr($str, array("t" => '')); // es
1 P& [: k0 O* K7 ?$ y, L - $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
" H @% S6 L6 P. A 有两种传递参数的格式,一种是数组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
8 ]/ c4 a/ s( m) _" d
str_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
- <?php* c4 b# p+ r$ R
- ' K, \+ j; {' \1 [5 V9 K2 @
- $str = "test";1 U! Q, Z1 @! v) _! I9 y' [1 I6 h' Y
8 q) ~% {8 {# w( L/ _# j- $str1 = str_replace('t', '', $str);// es
: e0 E, B/ _7 f0 x; v - $str2 = str_replace('es', 't', $str);// ttt
3 u1 W; F% }* u
3 w& L8 Q; H! V) M' f1 \- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb$ C% I `1 n' }7 L' h# x
- $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae( ^: H* a* X" o1 ]4 Z3 k0 Z9 B
- $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
. r u: \' z- \' @ - $str6 = str_replace(array('t', 's'), 'e', $str);// eeee% b( A- m. m: C! J8 h, F
7 B4 G, n; f9 {: I' `# h- $arr = array(
/ }9 u' F/ s% l! _+ A! d0 n { - 'a' => 'testa',' }9 X( P7 u$ M% x+ t0 ~
- 'b' => 'testb',! E/ f3 h, }8 ~8 `: Z. S! n3 d
- 'c' => array(0 M4 y) ^* B* y' R
- 'ca' => 'tes1',0 m8 r, I8 W. U; F/ C
- 'cb' => 'tes2',
% [/ O, X. s, \& V C) C* B) m7 ] - ),
& l# ~; V$ O7 H1 H3 o9 h - );# n! E- t& m9 m( l
9 t, B6 Q2 C0 H8 `. _5 |7 b" v# O- $arr1 = str_replace('es', 't', $arr);: q, i0 Z5 M* u6 ^1 F/ [0 a
- /**, J3 A) a. I5 S' Q+ D
- $arr1 = array(
4 }1 J9 o# F. c- S4 d - 'a' => 'ttta',
- \& O6 C8 _- @: e7 @' k4 t& \ - 'b' => 'tttb',7 k& q$ c7 w: m$ O5 C1 t/ n) u
- 'c' => array(
/ N) F# t5 u% L; k( K( b& p! u; z - 'ca' => 'tes1',8 @ A! T" f: T! |. F
- 'cb' => 'tes2',
7 X, \3 S$ T& M) l - ),
4 I% _: v( U/ I6 K - );6 J8 O- Q: q- k/ @ ~) @1 m) N
- *
: w6 q8 T, P& R+ o( |$ \/ V - *
4 J7 j* Q" {' c: a4 d6 i" O0 d$ b - */
复制代码 7 H8 ?- s) p* D+ U$ P8 G% n
( o: q, z( B+ v* Z
+ i) c L/ Q% g+ U2 z0 z/ xstr_replace()在使用上比较简单:
字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
4 s k" U9 o$ Q. {) `substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
- <?php5 k) v# ~3 ~* [( d8 K
- v( i8 m2 ~! [0 Q2 \- ^% @; I
- $str = "test";
& ]) `7 j& ?7 |& n% p; L) H - 2 A. w0 y; ]( v) L
- echo substr_replace($str, 'zzz', 1, 2);// tzzzt$ j5 T( ?# ?, L3 }8 G
- ) D* x9 k7 }7 P; U! B, v4 R
- $arr = array(# C# @ H: ]( ?0 ]" `
- 'a' => 'what',4 E, d* v: B% U( f' a
- 'b' => 'are',
2 B' ^8 c- r) O) r - 'c' => array(
, l) `: ~1 Y% } - 'ca' => '11',
) z! e$ L0 n2 r6 r$ Q& ^ - 'cb' => '22',
1 k: D6 q( N1 j/ c2 \5 g& @8 H* E# i0 h - ),, Z- K! u* Q# w% V9 s5 I: `
- );
5 E' }0 J, W* h+ q% S - * K" u( F6 q& q: {. ]
- $arr1 = substr_replace($arr, 'ok', 0, 1);
5 |0 @$ z& O w% g( \$ g0 t9 u) { - /**8 L: p0 r! l2 G5 w
- $arr1 = array(
$ ?; {& G1 E4 [% T - 'a' => 'okhat',! T# J* P3 o9 |( Y/ X3 u9 O
- 'b' => 'okre',
! Z) C# [9 A' ^( ?/ r - 'c' => 'okarry': R `0 e8 R% d% V d
- );
U2 ^: V0 ~ R - */
' b3 T7 K2 E! P9 Y" L) T! M
复制代码
5 M/ k6 R# T; ^! M数组替换的时候,也是处理一维数组的字符串值。。
1 Q( T' |& h- b- I
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
- <?php
, j2 s6 N! y( x* M" i7 z* E - + q$ g! {' z& w2 I9 L
- $arr = array(3 J& O- |/ [3 G; [+ \
- 'a' => 'XXX25012349999XXX',// 不是以1开头) H3 T/ E% Y- \1 T& L6 f
- 'b' => 'XXX13188887777XXX',
7 D+ z; ]8 `! g8 Z. j; m - 'c' => 'XXXX918811113333XXXXX',; t* X4 L, L& _) [# n+ l9 K1 ]
- 'd' => 'XXXX188111133331XXXXX',
0 c$ M8 E+ @8 |4 G: H; Y - );
4 t B) \, ]9 L' G
7 Z) c1 \$ h6 Y& H+ I- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3* ?0 X& c8 F+ n6 \" G
- " s. z9 B3 E) } m2 \- R
- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号7 e9 o: _+ p) s! q0 K
. @5 i* k4 u( ?& M. y% A- /**: a; S: j4 b4 s
- Array) _6 j T/ C; k0 _
- (8 I7 D% ?2 [+ H# P
- [a] => XXX25012349999XXX. e% F4 f* d( ^' T4 ^+ \! ~
- [b] => XXX mobile:13188887777 XXX' I& A+ {. t0 c4 m
- [c] => XXXX918811113333XXXXX
3 x. }4 K1 N. w" v$ H( D; [ - [d] => XXXX188111133331XXXXX
+ j. s# [( u) I. d! ]/ E9 x0 A4 a - ); ]( [( ]4 _, z5 f4 D* r# v4 G
- **/
复制代码
5 b! U. h8 u. z6 E% F7 ]0 |+ q
d2 S1 f' C4 ^6 _% t: Y
| 欢迎光临 cncml手绘网 (http://www.cncml.com/) |
Powered by Discuz! X3.2 |