cncml手绘网
标题: php字符串替换的几个函数 [打印本页]
作者: admin 时间: 2019-1-22 10:01
标题: php字符串替换的几个函数
strtr()
str_replace()
substr_replace()
preg_replace()
: K9 V2 k% K7 _, {strtr()的用法:
- <?php
, a" y7 P( g" R, F! x
' @) C6 Q" F0 Q) M- $str = "test";6 x% q' v+ J* Q5 A7 D3 H
- z2 B \& @# L* Y) Q2 t6 E- $str1 = strtr($str, 't', 'z'); // zesz
" x/ ]% ~3 n- R# z, T - $str2 = strtr($str, 'tt', 'z1');// 1es1
0 @, X% ^+ |3 e - $str3 = strtr($str, 't', '');// test
& B+ S2 p* F5 W; _2 N8 ]: x) b% o - $str4 = strtr($str, 'ts', '12');// 1e21
/ L) n7 G" c2 M' |4 a. G( f9 Y
6 m, G& t) g$ q' n5 V( g7 |
2 K9 Q6 E+ L6 g- o( o- $str5 = strtr($str, array("t" => '')); // es
8 \( t& O$ s" ~ Z- P2 r8 B - $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码 ) ?" N8 L1 b; h" B4 l' j
有两种传递参数的格式,一种是数组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
: P% T3 ]/ ]9 g* x0 n
str_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
- <?php1 E7 Q2 P! F* T% ?: s9 T
- ! `, D. a2 }* U
- $str = "test";
1 d! t9 h P% z1 e* K$ B6 X* W - # `" D |, |( ]1 Y- f; P( I, F
- $str1 = str_replace('t', '', $str);// es7 _7 Q, G9 q* o2 r( `
- $str2 = str_replace('es', 't', $str);// ttt
" X7 o) b& a2 B! e9 i. l1 q: k9 s* [4 k
1 t. W8 q5 P7 W' E; ]+ T+ C- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
B* g c! e: ~9 }9 S' d - $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
7 Y, ~& |5 P% W - $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa1 \% H6 S$ z: ?% x
- $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
4 L* O2 I0 l/ x$ D6 R0 Y' e
! G5 \5 ~, B4 e1 p `5 u# A+ {( U- $arr = array(
; V. K9 A! S& m8 N3 B4 ?3 d - 'a' => 'testa',# K0 e: h; d$ @( z
- 'b' => 'testb',
% S4 e. N7 M+ }, K5 q" D; E! Z - 'c' => array(4 n' L$ u/ ~1 ?
- 'ca' => 'tes1',- Y$ `- H; F% t6 I. l: J
- 'cb' => 'tes2',9 s& n' z) Y) S6 |
- ),3 Z* p2 c" I" T2 Z, z9 D! X
- );
0 L. ~/ q) \) `+ W
/ k& x; X: n8 u7 o$ S- $arr1 = str_replace('es', 't', $arr);
: r, I' X5 t4 J/ N4 \* x; N - /**
' }: L4 _) p, f - $arr1 = array(
, \, E0 \% p% b! s+ O - 'a' => 'ttta',
{( s5 q5 T1 B+ L - 'b' => 'tttb',
0 q- F7 y! m( S - 'c' => array(: G2 H2 d1 o$ _
- 'ca' => 'tes1', ?, {8 |: l% @0 K8 E1 ?) G0 E5 p
- 'cb' => 'tes2',* Y7 c2 Z7 J. f, f& A3 `
- ),! ?1 w+ J) l! P; P
- );9 F8 \ y' F% y3 s2 N3 D, L3 ?# p0 y3 e
- *+ U% l& j3 X# `
- *
# t: Q* t) V) d. N9 i9 x - */
复制代码 # c, ?! x# D2 e* B
# N: `1 m2 ]. s) L
& Y& _% H( R7 |- w0 ^1 G0 v$ Tstr_replace()在使用上比较简单:
字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
/ h6 i' i; {$ F' K$ l2 T
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
- <?php2 s* f9 e8 I5 {& c) N- E# M
- ' S+ Q& Z; \+ V* r; }
- $str = "test";
) k* `6 \. O5 \0 g! h9 B. J8 @: C - # @1 d# k" w) l% M$ l$ y, K) k( `
- echo substr_replace($str, 'zzz', 1, 2);// tzzzt
q$ P$ {1 o! f - 2 C+ e" l! n$ ^" n6 @
- $arr = array(
" z8 k& K* h+ t+ z8 @, d - 'a' => 'what',
+ S8 h& p( M2 n2 i1 V3 q - 'b' => 'are',
! n; ]( d' j( I ]- C - 'c' => array( M" o1 y. Z: P7 c3 p* ^3 ^
- 'ca' => '11',
5 J8 ?1 w! r& H - 'cb' => '22',
- G) ]* _* {5 b& W - ),+ `$ Z) ^0 L( X. K% O u
- );
. g) B' H" R7 {+ o) m$ N9 G - - t$ g! Z2 j8 d9 |
- $arr1 = substr_replace($arr, 'ok', 0, 1);
2 ~8 b) G6 H* P% ?3 r - /**
% p7 E: N4 U4 G# J/ n - $arr1 = array(- j# u! {8 ^6 ]+ _1 a
- 'a' => 'okhat',5 t( x( P' a4 \: i- U. [2 J) ]- s
- 'b' => 'okre',7 i6 o. i* I- [% B4 A
- 'c' => 'okarry'
$ k1 q4 J' C( U/ K; I - );
. t& m3 k$ F/ q0 k a4 d8 T; E - */
8 {- H; R* E0 e0 g+ {, ]& r! M, m. ?
复制代码 7 d9 X7 J S8 G, G
数组替换的时候,也是处理一维数组的字符串值。。
/ ?& |' T; H/ y# E( Tpreg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
- <?php
5 t( V+ v/ w/ g% h& W) ~- _* T
2 i i1 u# u* M- }0 O- $arr = array(' L H/ p4 Q& [9 o
- 'a' => 'XXX25012349999XXX',// 不是以1开头
7 S! H8 f/ k3 m: z K* s - 'b' => 'XXX13188887777XXX',
, \. Y7 o* b" ^* j8 d - 'c' => 'XXXX918811113333XXXXX',
! H; J9 y! x$ f6 q; u: o. j - 'd' => 'XXXX188111133331XXXXX',
7 d0 ^& w& v; f: n) q- g - );1 L) O3 w6 F. a2 X% A1 [
- " U L, {6 Z. f8 l. {# ^* T
- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$35 [/ q" e3 U/ O$ M+ j, A4 M" S
# L* l# O, E" y7 @& s- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
0 D$ t! _& l5 u6 e/ v' M
3 M6 Q; s! s) S6 ^* G- /**7 i9 D$ ^' I% U* I) k& z+ X# q
- Array+ w" i, x# m; U# T6 q* B2 L
- (
D% H* Z5 Q+ K - [a] => XXX25012349999XXX
}7 ^0 _9 O& q& c - [b] => XXX mobile:13188887777 XXX8 w6 T4 d q1 M! O
- [c] => XXXX918811113333XXXXX2 P( A# k: [( M* M: i' b
- [d] => XXXX188111133331XXXXX% M1 K8 Q0 M) [% J+ V. J9 J
- )
% C3 Q' q4 o6 i" p - **/
复制代码
9 c9 f1 j2 T' i5 ?% t1 b. D3 H/ e' ?/ E0 R
| 欢迎光临 cncml手绘网 (http://bbs.cncml.com/) |
Powered by Discuz! X3.2 |