|
strtr() str_replace() substr_replace() preg_replace()
6 I1 L3 _" u0 G' V# f% Istrtr()的用法: - <?php+ e; S) f0 P) z7 L) E# p
' I1 j+ ^' U3 G- a4 D0 r8 j. f- $str = "test";
3 a# l% ]0 t& m2 z: t - $ @& _1 s" J; j! G4 Q }
- $str1 = strtr($str, 't', 'z'); // zesz7 J$ c$ e& c6 m& \- w2 Z) q
- $str2 = strtr($str, 'tt', 'z1');// 1es1
. z* @9 V3 G2 y8 ? - $str3 = strtr($str, 't', '');// test
* T4 K1 ]* P! I8 c% _$ l% \ - $str4 = strtr($str, 'ts', '12');// 1e218 p; ?9 t0 y: L4 ?- G' N8 ?( A
' E0 A1 r3 ?. G @6 h3 o F- `- * P: L3 e2 `0 }5 y0 G
- $str5 = strtr($str, array("t" => '')); // es
: a) V e9 {% x# `! j' B$ U3 [ - $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码 - I) G/ C& B- }% @/ v J4 e0 F
有两种传递参数的格式,一种是数组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
$ ]5 ~( |/ f1 bstr_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject) - <?php* e, K; y8 h" r
: }. j8 V2 _/ Q+ p7 @- $str = "test";
, ?/ n+ C& Y' {' T
0 O- J6 e5 C; T- $str1 = str_replace('t', '', $str);// es6 i3 \5 W( q1 t; _+ l* }
- $str2 = str_replace('es', 't', $str);// ttt
( q+ Y) \% {2 d; _, | v
2 u: `! ?& g& R4 w- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
5 N* U2 B" X* q8 ^* E! A8 \1 k - $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
9 G% r s* } M1 I, F- M# e - $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa# _" U8 p ?5 O; Y9 O
- $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
! a) @% g1 O2 j9 q1 w. P3 b - : A/ u, a$ M# l2 V$ A
- $arr = array(
: N* ?3 E" ~ ]% v" M - 'a' => 'testa',
" T: n7 C& p! a Y3 C- M - 'b' => 'testb',
% T0 m a7 W; d4 C - 'c' => array(& N* y1 o1 N( U7 N, Z& I0 m0 s; H
- 'ca' => 'tes1',8 x# T r+ F5 h, j3 w% P7 j6 L
- 'cb' => 'tes2',
# B- A5 Q% |. |% ?' p - ),/ C$ E7 Q' f$ x$ e* O" E5 H8 t6 M
- );$ E' h4 |: P* g- K) b9 u9 r
- 1 w) ], q/ N* H4 T3 a" |2 x
- $arr1 = str_replace('es', 't', $arr);
4 v/ _/ [$ T( f) {9 v, M% U4 M a - /**
& X" U, U+ R; d u1 D - $arr1 = array(5 y; k! ^& Q+ F/ B# m Q( M* X
- 'a' => 'ttta',( A9 x, }* [# Q9 I/ W
- 'b' => 'tttb',
% N u( ^5 Y8 c' q% `: p - 'c' => array(
5 c3 q, |! b; Z& `5 H) j! T - 'ca' => 'tes1',
1 d" t7 P9 v# h - 'cb' => 'tes2',: _) R8 Z$ d/ i) F# }, l7 U ~: q
- ),' ~: a- Q' _; C, C; a
- );
5 i/ z6 U% \# D4 s" l - *9 P) k$ C8 t' w" [+ A6 ^4 }
- *
' S9 v* C( z: M" _& F2 _ - */
复制代码
) E7 |2 H$ K- T' a1 M4 h$ }
$ d# z5 T* P! I
0 S- w4 E1 H8 P# N/ a2 Vstr_replace()在使用上比较简单: 字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。 数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。): search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。 search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。 比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
2 @3 U' f7 a2 ?4 @/ d9 asubstr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。 mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) 举个例子: - <?php
- ?* I& W2 q) p: a& N; e1 `3 L0 p9 `9 W' a
+ h/ n9 X, I! e, V) M# E- $str = "test";
. X0 [7 q6 f" _0 Q) |; f
z. p0 j6 F7 @2 u- echo substr_replace($str, 'zzz', 1, 2);// tzzzt
% p+ y1 N% X, \9 E: W; L
- q( x5 K' ~4 J6 g- $arr = array(
+ V6 D8 g* z2 Y* D - 'a' => 'what',
) H6 H* x6 p6 A0 i& V1 c, y" w - 'b' => 'are',
8 D1 Z# m3 a+ [% q D - 'c' => array(
5 g4 e8 | R# m8 C% Y. K - 'ca' => '11',# j( R( b- R$ b- S
- 'cb' => '22',5 L1 |% K8 M+ j0 T; s) u
- ),# }% K+ E* Y- v% s% s9 H" X& U
- );
: d* g) V @. V
* ?6 d4 X) B, ~3 ]" e- $arr1 = substr_replace($arr, 'ok', 0, 1);7 _% R7 g7 N8 X
- /**
. }! t/ ~9 V$ A Q# p - $arr1 = array(
R( C$ V2 L7 {: j - 'a' => 'okhat',
6 @/ e% j8 U5 W/ v7 x* X: n - 'b' => 'okre',
' n5 Q4 H& Z& ]9 B5 K - 'c' => 'okarry'
+ E x/ @# d: n: H. S+ a - );, j& g( \" l+ b) p
- */% T2 a7 P i- D* N4 @( J# J
复制代码
2 c- l0 U' k$ Z7 E* c1 I! Y+ W数组替换的时候,也是处理一维数组的字符串值。。 8 w/ S' l+ s: S& [0 y
preg_replace()的用法 正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。 这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。 - <?php
3 I% Q7 Z- o! {4 m6 D& V* ` - ) M( e& y2 r0 y q: \! }' k
- $arr = array(6 H0 y* ?' D7 ^# w
- 'a' => 'XXX25012349999XXX',// 不是以1开头
* m7 A5 d& \. k - 'b' => 'XXX13188887777XXX', R: H2 |: v0 d4 C$ z, q2 T/ `. `
- 'c' => 'XXXX918811113333XXXXX',6 ^& b: z/ v8 \; R; }# O
- 'd' => 'XXXX188111133331XXXXX',. r' L" t! F6 ?5 e+ t" E$ L' [& B% L; z
- );
) @5 U( u/ _' h. g - 4 `1 R8 J* K( V+ ]( d& _
- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
; S% M4 P+ ?5 X# V: i" M; @
2 k+ V4 u1 T; V# \0 O0 d- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号 \4 l% O' a- M+ D$ a% K$ ~4 `9 X q8 e
- [+ s# o2 r1 p/ n1 m
- /**
9 G: d4 Q' I/ [2 u8 \ - Array
* _- O0 M7 C9 G - ($ L0 ?" f" k# W C
- [a] => XXX25012349999XXX: C6 j: }6 F5 y( d; W
- [b] => XXX mobile:13188887777 XXX2 _9 T/ ^7 e* J8 T' E7 s9 ~* |( z
- [c] => XXXX918811113333XXXXX0 K. [) {' s6 o V1 p4 e ?
- [d] => XXXX188111133331XXXXX
. w% J9 D. v/ i, t - )
# H) ^+ R$ J6 ~ j% b4 U - **/
复制代码
; D3 V* A. Q$ \1 } U7 m3 P& W# Z# x& r
|