cncml手绘网
标题: php字符串替换的几个函数 [打印本页]
作者: admin 时间: 2019-1-22 10:01
标题: php字符串替换的几个函数
strtr()
str_replace()
substr_replace()
preg_replace()
/ `2 _6 k7 N# rstrtr()的用法:
- <?php
0 Q: _' g9 S z
7 s' I6 a) k1 J2 Y- $str = "test";% P9 s4 \5 }1 {( U( v) W
- 2 ?0 s) l, `1 d
- $str1 = strtr($str, 't', 'z'); // zesz& J( k* O* j2 @0 f
- $str2 = strtr($str, 'tt', 'z1');// 1es1/ f e# {- V6 p0 ~! m
- $str3 = strtr($str, 't', '');// test
* c! ]' ~" ]1 K. [. Y4 t: T - $str4 = strtr($str, 'ts', '12');// 1e211 A+ S3 p+ K: c- Y3 p/ r
- 0 j/ w$ r+ y/ t0 ^, G6 k) r% `
- & k" d. I* N' M0 P; f3 u ~% I
- $str5 = strtr($str, array("t" => '')); // es
& l( X$ o( a( S# a - $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码 : q2 E5 L9 }! D$ u, |6 x+ }9 g
有两种传递参数的格式,一种是数组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
+ |6 Z, d9 a2 ^2 V* ]% Vstr_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
- <?php
# p* O, x3 D" H; m) ^ R - ! Q% O7 E/ l) U. t; v; m
- $str = "test";6 i3 g6 q9 V1 P, H
/ K0 Y+ w _% `; x- X; R- $str1 = str_replace('t', '', $str);// es
- c i/ p- S$ X( K - $str2 = str_replace('es', 't', $str);// ttt
7 a$ ~5 F5 G5 D; [
% V7 C! K* z8 k$ x: [" |6 p- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb# b3 l2 w" {8 o/ [& W
- $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
* D( X/ x9 e4 B" F; u' c) p - $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa
1 w# |2 P2 N! j& i% P" o - $str6 = str_replace(array('t', 's'), 'e', $str);// eeee3 A! r2 T2 l; n5 q/ \% N" i, Q6 @
- : p& \2 U9 w+ B# L& _& X
- $arr = array(
" ~; {6 [# H6 B. I2 Y - 'a' => 'testa',
C% g$ S( b5 W: ]1 Q7 L0 b - 'b' => 'testb',9 g- c0 \5 w: T0 H
- 'c' => array(
) o) q+ T: I0 W0 E$ v5 T - 'ca' => 'tes1',8 i2 U5 K9 f7 F. n* ^5 n
- 'cb' => 'tes2',
, @2 I! M- U) T0 {) ` - ),: d% i# k. D) c6 _4 j+ W
- );# f* s' `! `7 B) ~) E h0 s; }
- 9 _ B$ G6 @/ {: k
- $arr1 = str_replace('es', 't', $arr);6 \5 e- E& d' ~, ]: r
- /** E: \6 \8 N4 |+ L" p( u
- $arr1 = array(
4 t1 @& |" p& E8 [" ^# i) L - 'a' => 'ttta',1 {4 Z( W O9 H% ^" E
- 'b' => 'tttb',3 m8 l; M* U6 d, I& S" K
- 'c' => array(2 p5 H8 S: F# |1 X2 F4 \8 U
- 'ca' => 'tes1',6 ^; v+ b/ p+ g0 x
- 'cb' => 'tes2',6 `- i! n- f1 n2 D
- ),% q6 _' f8 k& e% l' B( s
- );/ h, |6 }- W+ T
- *
7 t$ G, z( [+ [5 C! |, e2 n - *" @+ H: M% ?4 S4 N
- */
复制代码 2 e$ {7 B- G: ~1 m2 ~ k: H
" [3 {: Z3 ?# E K
. q4 z5 L0 e5 Ystr_replace()在使用上比较简单:
字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
4 U, G# A; @8 i t: T( A
substr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
- <?php
U# H2 p1 w+ X B0 j3 f - * O$ E0 m9 ]" q+ d& T3 c
- $str = "test";
$ Q e2 ]! Q: s5 `% Y; |% O - ( L1 U0 p6 ^1 P* s
- echo substr_replace($str, 'zzz', 1, 2);// tzzzt
) x( x$ X% R8 x: x8 z1 w* d, J' ?
+ w E: L# X* p1 X' `- $arr = array(3 G: a$ Y" S& P" a3 N5 ~# {8 U# g
- 'a' => 'what',* n# N* k* k& N `0 c' s- g: U
- 'b' => 'are',
. B0 G \6 L- @. v8 s - 'c' => array(1 V7 D3 U! ~9 R* d- l
- 'ca' => '11',0 Z! K' ~" Z- ^0 T" g
- 'cb' => '22',
q. o. X1 {% H8 q6 J$ Y6 h - ),: u9 R' H0 G6 e6 d( s
- );
+ |$ y( c$ [) X4 ~ D% E5 ^ - ' I2 x- ]9 L ~
- $arr1 = substr_replace($arr, 'ok', 0, 1);2 M) G; y" W, [2 M. f# a' A5 A
- /**
2 E' ]5 Z8 ^' X* e2 N' F - $arr1 = array(! E, k" O" B6 H2 P6 z
- 'a' => 'okhat',+ M ]5 B( w9 u0 F; O0 a$ K
- 'b' => 'okre',
; ~: K0 U5 \, b! P; h) E; | - 'c' => 'okarry'" ^0 W8 O, v, L3 \2 R9 G
- );
+ s" x6 X( A; n( b - */+ `& ~! ^: \; T0 Q# a0 b
复制代码
2 z8 K" K5 Z, _0 a& k. w3 i: ~数组替换的时候,也是处理一维数组的字符串值。。
0 x8 N3 U+ U8 r( [; G1 i3 v# U7 Qpreg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
- <?php
! t/ J5 r Z# g1 `* ?5 J. l - ) s. Y7 U- }8 q, ~3 b
- $arr = array(
" E/ M+ S6 t; U% x0 e - 'a' => 'XXX25012349999XXX',// 不是以1开头
/ r, N# l9 Q7 i" ^& p - 'b' => 'XXX13188887777XXX',
4 M1 O. Y% a+ l& _& s( J - 'c' => 'XXXX918811113333XXXXX', K, x- k7 ~3 W' U; H# m0 B
- 'd' => 'XXXX188111133331XXXXX',
" B1 e& [3 c! |8 C/ s - );
# J: `5 b3 v2 v
& U+ [) A, f4 b/ }3 `1 o3 T2 C: ^5 f- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$3
* L% N( w0 q5 w: Z9 d: M2 u
: n- S* a4 X" U- V5 d3 M; S& U- D4 X- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号
^' _6 Q& S( b k
. I: N/ m8 M+ p/ Q+ d; x# l" O- /**, g- V" x# @! G0 |: n; H" h
- Array
$ k( E4 [ S s! ~# K1 {/ Z - (
) t7 m: _2 c5 T! N) |1 P - [a] => XXX25012349999XXX v5 Y0 ?4 J9 @. U- O* {' S
- [b] => XXX mobile:13188887777 XXX' a; \( G9 S* r2 n" X4 {8 p
- [c] => XXXX918811113333XXXXX3 s0 t$ ~. r# N" A/ |9 V, D, D$ l
- [d] => XXXX188111133331XXXXX
7 S+ W0 h' k- g - )
/ {' D, c* C& j q/ e( Z. z - **/
复制代码 " _. _" C2 `8 R
8 G9 L, i2 D h2 Z8 l" m
| 欢迎光临 cncml手绘网 (http://www.cncml.com/) |
Powered by Discuz! X3.2 |