cncml手绘网
标题: php字符串替换的几个函数 [打印本页]
作者: admin 时间: 2019-1-22 10:01
标题: php字符串替换的几个函数
strtr()
str_replace()
substr_replace()
preg_replace()
# e. w" O! L7 e" c: Ystrtr()的用法:
- <?php! X% E; z: k; `/ U, C J
- 7 r( W; J) y, ~3 O) ^* s; R
- $str = "test";( B! Y* ]8 Y* V
! b1 L/ B3 ?( z% x; J4 s- C- $str1 = strtr($str, 't', 'z'); // zesz' I. W8 p( H1 B) F8 }
- $str2 = strtr($str, 'tt', 'z1');// 1es1
9 N: F U' U' e, Y6 R+ W$ v$ `- r - $str3 = strtr($str, 't', '');// test* f( v3 P O" i2 k2 z* H' y. a, z P9 ~
- $str4 = strtr($str, 'ts', '12');// 1e21% L) Z* r+ V" a% T" Y
- / _$ l$ ]7 @" l$ ]* W# ^/ A' I
d# i- ]0 T4 V2 b) k- $str5 = strtr($str, array("t" => '')); // es8 `5 Z; P0 ~) e U
- $str6 = strtr($str, array("e" => 'www', "s" => "hhh"));// twwwhhht
复制代码
) j* s* r( N) @# B" T* q: s 有两种传递参数的格式,一种是数组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
- U2 D( j4 a- @" S/ w& \2 B* Z0 e
str_replace()的用法: mixed str_replace ( mixed $search , mixed $replace , mixed $subject)
- <?php0 P, J p0 r/ n% J
- % x \$ W4 Z$ O
- $str = "test";& I; O# \4 L. A9 g/ T
, E: W8 I/ `/ n3 E. G- $str1 = str_replace('t', '', $str);// es
. D+ \- ]( \, J* ~6 k0 O: z - $str2 = str_replace('es', 't', $str);// ttt7 o1 B+ J `+ x" N- J+ d2 R4 u
* Q: Y: I a7 x- $str3 = str_replace(array('t', 'sa'), array('a', 'b'), $str);// aeb
: q1 W8 ` _: n# A- h H9 D3 B - $str4 = str_replace(array('t', 'sa'), array('a'), $str);// ae
" F: f8 z% a/ W8 j, q$ T - $str5 = str_replace(array('t'), array('a', 'b'), $str);// aesa4 `2 i) }" f$ k- {' T! r8 p T
- $str6 = str_replace(array('t', 's'), 'e', $str);// eeee
0 N" d7 p! {$ q( ]+ N0 N: L
) g, u; y/ z6 a4 ^3 G! s- $arr = array(
0 m+ O5 ]1 g- w* B - 'a' => 'testa',
* p3 N2 P) Q8 B, Q' d8 y - 'b' => 'testb',! ]2 l9 d! M2 [0 v5 k" S" k
- 'c' => array(
) r6 d# t1 n' J' r4 W4 e - 'ca' => 'tes1',
6 H7 M8 d8 l4 X; T - 'cb' => 'tes2',
8 H% K) l7 G2 [) i2 W# ?) V - ),3 Y3 Z0 C# Y* M: H% Y* Q
- );! o; p2 c. W6 N
- 2 k# `5 d$ y. h) R6 z
- $arr1 = str_replace('es', 't', $arr);" y) N9 F5 q2 g3 g+ `0 S
- /** u6 B6 ?% K7 F* w
- $arr1 = array(' Q, v7 h. Y$ t* ~" J
- 'a' => 'ttta',; e. H5 ` ^; R. Z
- 'b' => 'tttb',
0 P: g$ F# {/ c" E R - 'c' => array(
' x" D$ v5 y5 A8 ~) w - 'ca' => 'tes1',; c9 x8 ~' @# L# d
- 'cb' => 'tes2',. n) P; H& q7 ~3 Z
- ),5 C2 E8 ^% y+ O/ k+ r2 g0 a" x" g
- );
1 ?4 t9 E- G8 u7 y& V3 Z9 m# E - *
+ o! p3 j$ c. T- j - *# ~: e- V# e, ^ T
- */
复制代码
! y7 z" `% W6 f6 X! b! t
5 c; ?$ Y; w5 b8 \# [9 R" o0 ` t& u, a, j3 T# Y' b
str_replace()在使用上比较简单:
字符串上的使用,replace直接替换掉search,注意这里就不是字符对应,是俩参数字符串对应(区别于strtr()函数)。
数组上的使用(值得一提的是:前一个对应元素替换完得到的结果再应用到下一个对应元素【会发现第9行的sa被替换成空了,而sa是第一步替换完得到的子串】。):
search和replace都是数组的时候:如果是两个数组元素个数相等,各个参数对应(如第8行)。如果search个数大于replace的话,多余的就被空字符串替换(如第9行)。
search是数组,replace是字符串的话,就是字符串中出现的数组各个值被被replace替换(如第11行)。
比较意外的用法:str_replace()可以处理数组的值,结果也返回数组。。这个就可以免去程序员手动循环数组了,经测试,只能对一维数组生效(如第22行)。
4 l5 M) d8 m7 D7 A2 x3 a5 Ssubstr_replace()用于替换字符串的子串。使用方法:是指定处理字符串的开始和长度,然后替换掉这段区间。也可以替换数组。。
mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
举个例子:
- <?php
+ }6 G. k* [; q: Q+ P0 x1 ?5 v
( Y. _) W/ g6 ]- $str = "test";: O) f! Y. g7 X- S" A7 G
, M" q2 _+ r8 }: X4 k0 p- echo substr_replace($str, 'zzz', 1, 2);// tzzzt
K3 V7 p1 X! h1 q5 @/ R$ S
; l: J) u! c' j7 \1 x7 b& _3 h- $arr = array(
; P* k: |1 W$ @ t6 s0 H1 @; W - 'a' => 'what',' s# D3 t1 H$ Z L( p* |
- 'b' => 'are',+ B8 D4 t7 V/ Y
- 'c' => array(
( y& e+ j: S7 U n% m/ v - 'ca' => '11',
2 P$ a) p1 J: T/ q - 'cb' => '22',
4 ]7 M( [/ y k% a5 u - ), V: |4 J9 ~$ |( R4 J
- );" ~+ o, U2 d, K0 e2 u! W3 v" q) s
- + L& F2 \0 h! }' M v9 ]* I
- $arr1 = substr_replace($arr, 'ok', 0, 1);5 F0 O$ c1 L$ R
- /**& C7 \- s2 g: ~
- $arr1 = array(
, E u" Y; N# K2 C3 u - 'a' => 'okhat',
+ v. r$ h. d L+ z# {( D - 'b' => 'okre', e7 X: L$ a* g
- 'c' => 'okarry'
6 }, e6 i# @) x7 A' w3 ~) Z/ m - );
$ e2 K& |$ a' \: m t a - */' I* w. p. h! u& u( u4 E( D! V
复制代码
7 F) x/ x, R) h, P' A& S0 i: u数组替换的时候,也是处理一维数组的字符串值。。
/ s1 U% v L1 k
preg_replace()的用法
正则这个就尼玛太强大了,主要用于匹配特定格式的时候,否则推荐直接使用str_replace()函数。
这就举个稍微简单的例子,一段话中间夹杂着一个手机号码(简单匹配,就是以1开头的11位数字,前后不能是数字),想要在手机号码前边加上( mobile: )字样。
- <?php
* J, o! d8 U$ D0 @
! D2 i2 M+ F: W6 _- $arr = array(
; S4 a; ~' {+ B& E% A: E - 'a' => 'XXX25012349999XXX',// 不是以1开头
; ^6 C! U8 Q0 S# L$ i u u* f - 'b' => 'XXX13188887777XXX',
! H( U2 @3 S/ c5 _' d - 'c' => 'XXXX918811113333XXXXX',
/ t$ `- {6 J+ ~ - 'd' => 'XXXX188111133331XXXXX',: _2 Y- N- |' y4 P0 K
- );- @4 R/ \- ^7 ] |% p
$ N, N7 G# G! U4 p5 a9 O4 r2 V; g- $re = preg_replace('/([^0-9])(1\d{10})([^0-9])/', '$1 mobile:$2 $3', $arr);// 利用$1,$33 J. [3 ^5 g- t+ C
4 h, S: L% I7 N1 s9 P- $re1 = preg_replace('/(?<=[^0-9])(1\d{10})(?=[^0-9])/', ' mobile:$1 ', $arr);// 使用向前向后匹配,直接匹配的$1电话号% b! d+ x! R u3 s5 k) x
: p( U6 T3 z# O3 G- /**
2 A$ `' e% r4 z( n: ^% Y - Array8 R1 [# ^/ Q5 Y3 P
- (
0 t4 r1 v. ]; }( ?0 O4 t1 s* o - [a] => XXX25012349999XXX
' f* s5 W M& s$ R! \ - [b] => XXX mobile:13188887777 XXX
; }0 F9 x, h+ e* C - [c] => XXXX918811113333XXXXX+ a2 @% _# E6 [1 f5 {& V8 G
- [d] => XXXX188111133331XXXXX/ T& g0 ?# `$ n: f+ {* @+ q# e
- )7 N7 S i* D* v4 o$ e( `# a7 |* |
- **/
复制代码
' w7 H {' j: _+ D. {( K! F7 n4 F% s$ i% T4 ]3 U4 X# e
| 欢迎光临 cncml手绘网 (http://www.cncml.com/) |
Powered by Discuz! X3.2 |