发新话题
打印

[理论探讨] preg_replace()和ereg_replace()函数的使用的比较

preg_replace()和ereg_replace()函数的使用的比较

<?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 test8 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*支持更多的东西
发新话题