<?php
u0 s6 D; Z% m# Q//preg_replace()和ereg_replace()函数的使用的比较
% ~! L8 x& B% c! m: ?* P0 {3 g
// -------preg_replace()--------------------------
9 t3 L4 v* F2 J( ?: a( }
//1.进行字符串的查找的替换
l6 L% l1 r! ]4 \5 h0 O! f( M $str = "daoyu shi ge hao hai zi 5555";
8 ]7 q( B" s6 X0 h$ e $pattern = "/s/"; //如果将变量定义为$pattern_1会出错
# E6 S, @' K5 T. W $str = preg_replace($pattern,'-',$str);
$ n' I: c4 f9 H7 x echo $str."<br>";
- a9 g' E2 v g2 S/*打印:
I- T( j5 S9 U% I* X1 Z
daoyu-shi-ge-hao-hai-zi-5555
0 i+ M$ j- L3 b. {# f*/
/ {) I* w1 Y# ~$ f# T: ~& ^: |
//2.对字符串的逆向引用
$ [" ]* k9 B" s9 b1 q' i3 S, ]//方法一
) E' O6 l; n: ^# N
$pat = "/(w+)-(w+)-(w+)-(w+)-(w+)-(w+)-(d+)/i";
5 r5 W7 C w5 S" _$ u- W. u
$str =preg_replace($pat,"$1",$str);
7 `! M7 \( V0 x$ N# G9 o3 ~: ?- o echo $str."<br>";
8 `! R2 V, \+ r
/*打印:
, o3 W. k3 j* G0 |! S: [/ W, h' r1 d0 f
daoyu
3 \/ v9 W a! j* k' |*/
3 @4 Q: R+ ^. \
//注意:如果是下面这种形式你会发现匹配的是:zi- 所以可以这样认为在有次数的{6}的情况下,他($1)匹配的是最后一次
- ~) Y6 G# [/ I: q4 D
$pat = "/((w+)-){6}(d+)/i";
0 D" [7 }( E7 I+ o w8 E y7 v
$str =preg_replace($pat,"$1",$str);
' I) w$ ?; w; l9 f- o
echo $str."<br>";
& B* { v' l& e/*打印:
. S) t# {5 Y) A1 R% y2 d zi-
/ `: r5 c6 m& @" c
*/
5 ]$ f3 }5 |( h* L8 u
; k b" Z3 |% N* @4 C$ e//方法二
& N# F u% v3 z, I
$str = "daoyu-shi-ge-hao-hai-zi-5555";
. m3 Y2 {* u" n: |) S. p/ }9 J $pat = "/(w+)-(w+)-(w+)-(w+)-(w+)-(w+)-(d+)/i";
1 }1 }6 x* Z/ W% I $str =preg_replace($pat,"\1",$str);
9 r& h4 M$ U& J2 D9 X echo $str."<br>";
! k' R0 {* D) l* ?" @# k/*打印:
- N" r( M1 N& A! Q; v/ _# P) V$ W& M
daoyu
( [- V F* ?, a' A*/
2 G; W7 E; J2 b0 i
//注意:当正则写成$pat= "/((w+)-){6}(d+)/i";时和上面的情况一样
& o0 Q2 [- c( a3 I8 L//3 当参数是数组的情况(用下手册的例子)
9 e, j5 s9 B* a" k6 ~
$string = "The quick brown fox jumped over the lazy dog.";
6 i& c8 _/ n1 O+ m: j' o
/ |+ A# Q h& S% ]
$patterns[0] = "/quick/";
! E u5 m9 m: t; { $patterns[1] = "/brown/";
' p! u, Y4 K6 p* q' s1 Z $patterns[2] = "/fox/";
) d3 F$ G+ D/ o4 ?4 P; N& `
+ ^: l/ v; K. I, F
$replacements[2] = "bear";
" ]9 `3 H5 w4 f1 j: N3 [ $replacements[1] = "black";
I5 _1 l/ K) W# S $replacements[0] = "slow";
! r0 o2 E5 I3 L% ~% a9 X
5 i$ K6 W: o0 `* @7 i8 P print preg_replace($patterns, $replacements, $string)."<br>";
( I' q; H) L( ^3 t! ?1 x- K6 a/*打印
+ o% b. T6 r9 A6 ` The bear black slow jumped over the lazy dog.
_# I7 i( |) |3 y*/
# {: J3 H! W! v0 Z+ J% K% q//或许你已经发现了,他是按“将以其键名在数组中出现的顺序来进行处理。这不一定和索引的数字顺序相同”按我的理解就是在按“写”的顺序而这并不一定是//索引的顺序(书册上还有还有ksort()后的例子,时间关系就不说了,有兴趣的兄弟可以自己找着看下)
' p( G* h, |1 c! e& ~1 v3 A
; K# ]! u2 X8 b1 }& F//好preg_replace()就扯到着,开是扯下一个ereg_replace()
' L6 X' i1 ^2 B8 o//---------------------ereg_replace()------------------
- j5 ^8 ]+ m. N: |/ c* N% d( o
+ J. | m: w% e: C/ O7 L f
//1.进行字符串的查找的替换
- E5 L! K* v* N
$str = "daoyu shi ge hao hai zi 5555";
" T0 f( P4 P1 e. t* x5 D $pattern = "[a-zA-Z]+"; //如果写成$pattern= "/[a-zA-Z]+/"; 将不做任何替换也就是说这里不能用正则“/”(可能就是着两个函数的第一个区别 :))
Z6 ]8 P6 p3 ~& @$ U $str = ereg_replace($pattern,'~',$str);
) U; Q5 \ i. z! T echo $str."<br>";
) i, t+ A" g# t# i
/*打印
5 \8 o2 V$ H* @/ p+ o% L% B ~ ~ ~ ~ ~ ~ 5555
: h/ S7 \7 @. h y
*/
+ @" S/ \/ ^& F5 l8 U//2.对字符串的逆向引用
( P: I1 [; `$ Z1 w- R//在用下书册上的例子
2 ~" U. T: `8 s, [ $string = "This is a test";
' N; o4 x9 f+ m: `0 A& r4 F//echo ereg_replace("( )is", "\1was", $string); //“\1”匹配”(空格)is“ 这部分的空格,换句话说就是”替换为数字表示的的第几个括号内//的子串“
3 J* W5 A$ a* n
# ^6 H; {/ O/ P echo ereg_replace("(( )is)", "\2was", $string)."<br>";
& T) ?. l$ ^- a& }2 u: o/*打印
+ J; S0 z/ m& {+ Z" _
This was a test
8 Y/ B v( u) e$ Z! I
*/
& C6 P6 X& ?) r
//对上面的使用还有疑惑的兄弟可参考写这篇文章
http://elma.9iec.com/index.php?j ... d=a_20051104_175700
& D4 H: ]" I# Y. S$string = "The quick brown fox jumped over the lazy dog.";
# j' X6 V4 F( y
( g( l1 a! _* h3 L- w; M; e* Y $patterns[0] = "/quick/";
}/ a Z7 I0 }3 K3 i $patterns[1] = "/brown/";
6 D9 S5 ^, C# F U; T8 d3 f2 W/ S
$patterns[2] = "/fox/";
% w5 k, T1 o6 Y+ E4 t- J: H/ ?% s; H+ X( ~( t. e% g, h
$replacements[2] = "bear";
$ u4 B- H: v! R $replacements[1] = "black";
- t- ]# V0 r* g# m. D0 E& c5 J8 Y $replacements[0] = "slow";
0 ~( R% g7 w6 h
3 i$ r; q2 T7 Q/ G4 E+ r/ q1 _
print ereg_replace($patterns, $replacements, $string)."<br>";
; N: i( G1 ?" z3 ~//总结
& u0 y4 K% y! q1 g$ q0 E; A//1 preg_replace()里面的正则可以写成型如:"/..../"而ereg_replace()里面的正则需写成型如".....";
* u7 d# Q$ W3 e* m3 ?: i* u
//2 preg_replace()能操作数组,而ereg_replace()不可以
0 H$ I* O% a- b% y1 n1 i( F//3在逆向引用用preg_replace()可使用0-99个,而ereg_replace()最多为9个
$ U! M, w+ N, |' ?' {8 D" o4 P
4 O( |3 C& z; Z8 | }//在使用过程中感觉两者的区别不是很大,在功能上也比较相似..
^9 \4 {8 y" x3 n1 }7 G) R
' a2 m$ E5 P/ h( c( [. s, J S, S1 `* ?4 q& f% a. t" v
?>
3 X, i2 w" m$ B1 e2 `& Y0 j- z5 E7 ~9 l: w% ~2 N, q
速度上preg*是ereg*的二倍
/ q, ^' ^# Y! J/ H; {而且preg*比ereg*支持更多的东西