cncml手绘网
标题: php字符串替换的几个函数 [打印本页]
作者: admin 时间: 2019-1-22 10:01
标题: php字符串替换的几个函数
strtr()
str_replace()
substr_replace()
preg_replace()
0 x+ l) j- w4 D0 q& B
strtr()的用法:
- <?php
5 i# `2 o+ A6 ~* w$ A
1 H J$ m3 F% J& S9 f; e- $str = "test";/ r) K$ L; m* t. Q6 t. l
- 1 ?' l: K9 `* e' r" t" s, y% J; r* h
- $str1 = strtr($str, 't', 'z'); // zesz
9 e: H4 S h, ]- Z& X) G" Y - $str2 = strtr($str, 'tt', 'z1');// 1es1
2 R/ }# F7 J/ |/ B/ l - $str3 = strtr($str, 't', '');// test
6 W- Q6 ^% V' c4 z" J - $str4 = strtr($str, 'ts', '12');// 1e21
8 ]% `- ~9 X4 h. t* M# K0 s
' o1 R% x* Z! m0 Y9 L- 9 o1 R( t+ i \, _) N+ s
- $str5 = strtr($str, array("t" => '')); // es: c& e# R8 z3 l1 N. w' h
- $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
2 z# o6 |* d7 C4 Z4 I 有两种传递参数的格式,一种是数组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
1 s# J$ p1 w/ [/ hstr_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
- <?php
$ _! U0 N, x- h
6 q, D0 H) D8 P8 t- $str = "test";9 r. G' k1 Q9 J1 ?* r" _% n2 U
) E& c: H# P- ^9 e- $str1 = str_replace('t', '', $str);// es/ r& {$ W: r% n! d C
- $str2 = str_replace('es', 't', $str);// ttt% U) j) O! s* E4 N W4 u* Y
- 3 e+ g' c3 i# n! y! H3 ]9 z
- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
- z3 t) m6 }! X. Z2 J. P - $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
8 j* \0 Q, r9 M/ r& @' R' ` - $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
3 X! W* V; J- S* D - $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
# z Q" D! n9 Z; ]( ?7 u- N9 h - ; l/ Z, r7 {# i7 R
- $arr = array(3 h1 [7 @4 _; z5 n6 @0 q
- 'a' => 'testa',, e. v6 L+ B+ r6 K" }' B4 C* H3 z X
- 'b' => 'testb',$ \, }4 j! }3 \2 I4 a. x+ L
- 'c' => array(
( {$ p2 }7 e( ^ - 'ca' => 'tes1',
n1 g' t" Q+ ]/ x; c% U% B - 'cb' => 'tes2',
1 w& m- x( \9 d - ),
; {4 V' J/ t* \7 f6 P% n" ~0 t3 ^ - );
- ^+ j& {* i" G
+ R! T) @" Q5 A% z: q- $arr1 = str_replace('es', 't', $arr);) R0 k( T7 e3 r& q) W. T
- /**
+ X) d, V. \: ^: Q7 _4 a: Z4 ?8 I - $arr1 = array(
9 k9 @ V! p! O* }1 C2 l- H - 'a' => 'ttta',
7 b% H7 n% b7 ^( G, I) f: A* A - 'b' => 'tttb',
6 g# D. \) h+ q7 X$ r - 'c' => array(9 p9 Q% M+ z# B+ n9 x8 l
- 'ca' => 'tes1',+ X6 G( f. y. o3 B* N5 c7 |
- 'cb' => 'tes2',
3 t3 B: M$ W$ [0 G' ?" u - ),
( J! r6 A p& f2 ]% N! d: v' p - );: B5 N. F- e0 U, ^
- *
+ H: T# U2 c1 W# W3 M - *, N$ I( T) R' X& f5 R, x; z
- */
复制代码
9 X0 J3 s% o' |6 }: b
' m# n) i1 @' @2 b4 `( D% ^0 p8 J* R- L
str_replace()在使用上比较简单:
字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
0 L! _( G' r1 S4 s. o6 i1 B. O
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
- <?php
1 B, r1 |# O2 E
2 Y u0 L% } |7 `2 p6 F. v! S5 [- $str = "test";
* e U( n5 Q; ^, I# B0 n3 F
" s. x: V, z% n5 E6 Z- F' D; j- echo substr_replace($str, 'zzz', 1, 2);// tzzzt
6 l& b9 c0 U) U9 m0 r: A* u; q
, u& r3 Q/ @& A, I8 M2 b S- $arr = array(: }1 f7 \ |4 \7 q
- 'a' => 'what',
/ W _+ N E4 t* f6 m' U8 W - 'b' => 'are',$ e: k$ j4 g. d; A- _8 M6 y5 t
- 'c' => array(9 Q) p w. t9 k! ?6 ?. N; l
- 'ca' => '11',
. A" p! r Z/ D5 E# P9 n - 'cb' => '22',
# B2 c: z% v" d8 E$ k0 ~9 t/ b - ),
( s* l& J' n. V9 h/ S! v- ` - );
# {* T. v2 Z/ u, j5 ~ - % m( v. J4 G v3 k0 x' k
- $arr1 = substr_replace($arr, 'ok', 0, 1);. K* w- s$ C; [/ H
- /**
$ t: q0 {5 |! R+ s3 t - $arr1 = array(9 u* G: S% ^& E- s3 S' n' U R+ F
- 'a' => 'okhat',
. ~. B1 O7 `! r - 'b' => 'okre',; } v- o1 e% r1 p* {
- 'c' => 'okarry'* @- m1 B; L. ^% \" R* {
- );: B+ @5 G6 W5 J# V( G
- */
( I7 N Y; @ T' \4 B
复制代码
' x& Z9 f D0 e数组替换的时候,也是处理一维数组的字符串值。。
0 i; S( E/ e% {8 X1 `2 M- _' f4 y' x+ d2 Z
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
- <?php
6 l5 l% C% x, _; N
! e; B% T/ ~4 I5 l# X- $arr = array(
, S/ J6 Y" U; w: E - 'a' => 'XXX25012349999XXX',// 不是以1开头( X; ~# o, B; s4 _( [0 [ b; j
- 'b' => 'XXX13188887777XXX',) o! x1 Z$ z- O. n+ k
- 'c' => 'XXXX918811113333XXXXX',
' [! F/ b; E& _& j! C, J - 'd' => 'XXXX188111133331XXXXX',. Y0 D3 u% V7 m& }* ^! f% F7 a
- );
3 q' m8 l& C# w& m - 8 D+ L4 t7 M1 x9 Z) d) y
- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
! j9 y' r5 l/ }& ?; q" h
% i8 B7 q% ^) P* }: q0 S- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
. W6 T/ u* {7 \2 ?( T" X3 l - ' `" w- {+ I! n
- /**! Q! R+ ^* j5 y9 V
- Array
2 R7 j# ?1 \8 q4 [ - (1 \1 _# t5 @' O+ M2 i
- [a] => XXX25012349999XXX* [' K5 T8 ?2 F5 ?- f3 ]
- [b] => XXX mobile:13188887777 XXX! v6 c8 {+ e$ A1 G; K# s
- [c] => XXXX918811113333XXXXX
" X9 n* ]" f+ }! ] - [d] => XXXX188111133331XXXXX
& h; E" A5 P+ _4 [9 D& o - )' G; L! u) }0 [" j7 q
- **/
复制代码
$ m& H$ U k; [( {# v" e ~/ _. G/ Y2 ?5 A b" n- S2 [9 Z
| 欢迎光临 cncml手绘网 (http://bbs.cncml.com/) |
Powered by Discuz! X3.2 |