设计动量论坛's Archiver

sogood 发表于 2007-3-15 22:10

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

<?php
A RVu5` ]}s //preg_replace()和ereg_replace()函数的使用的比较niLwn J
// -------preg_replace()--------------------------
"?,f]p9N%c4m //1.进行字符串的查找的替换)h,m`0Q-D&j
        $str        = "daoyu shi ge hao hai zi 5555"; z%KZEME?
        $pattern    = "/s/";          //如果将变量定义为$pattern_1会出错 p.V(Aw6GDg9@U `
        $str              = preg_replace($pattern,'-',$str);4jNB|hb
        echo $str."<br>";et h4N7H[3gT
/*打印:
3ah-l/t"c8x!EY2Z7P         daoyu-shi-ge-hao-hai-zi-5555
kv!~f e@}_ */]/b:De}&[
//2.对字符串的逆向引用V6SA4Z^6[7M
//方法一
$LR nB:ku         $pat        = "/(w+)-(w+)-(w+)-(w+)-(w+)-(w+)-(d+)/i";
?'][Y o@h         $str        =preg_replace($pat,"$1",$str);-huj+vtf#R XO
        echo $str."<br>";
+zB'a(}#@d /*打印:?X` bp{I5Mn
        daoyu[3c@a&L;x7x
*/[zm m$t;L
//注意:如果是下面这种形式你会发现匹配的是:zi- 所以可以这样认为在有次数的{6}的情况下,他($1)匹配的是最后一次
U(^jnL         $pat        = "/((w+)-){6}(d+)/i";n2OgZ6q M
        $str        =preg_replace($pat,"$1",$str);
gdpEj7zm$D*b:r         echo $str."<br>";
5?"v)S$nm0M)}Lp /*打印:I,Wd_T/Pc
        zi-
B'T+bbz!f#jg */8t/w9`'PY!H2s-] gB
6r f2x Q0JW
//方法二
6Z*YwN\         $str        = "daoyu-shi-ge-hao-hai-zi-5555";
z?'?t"K+@Q         $pat        = "/(w+)-(w+)-(w+)-(w+)-(w+)-(w+)-(d+)/i";        
-wT1H7S*l\E         $str        =preg_replace($pat,"\1",$str);OVR7a8s/b+Gbs$A
        echo $str."<br>";i6j8l A4l+BaFn"rC
/*打印:        ,{ |9K(O*zc1L
        daoyu y*ILI9i RLs
*/
8o6v7v}Q a"{G(Y //注意:当正则写成$pat= "/((w+)-){6}(d+)/i";时和上面的情况一样;i#{VPpHNM%C
//3 当参数是数组的情况(用下手册的例子)KF;],k T\
        $string = "The quick brown fox jumped over the lazy dog.";
)v hr{-_!V#}zX
'qksed2h         $patterns[0] = "/quick/";
!W(]6_e(LC9K'Db         $patterns[1] = "/brown/";-y{!?*L n#C:?!N0k
        $patterns[2] = "/fox/";
$Q]Q[bl4T#{e pjh:Z1g lBY.R
        $replacements[2] = "bear";
q8f Sl1O)P         $replacements[1] = "black";+oz!y4fX8tPI*U&V
        $replacements[0] = "slow";s2w.w2xdW)P"y

M]T.Rq{         print preg_replace($patterns, $replacements, $string)."<br>";
U6WEqQi!AYa /*打印v{9?GX"C } J
        The bear black slow jumped over the lazy dog.;iU6euU,M1Q+q
*/ ^%If([.@ i
//或许你已经发现了,他是按“将以其键名在数组中出现的顺序来进行处理。这不一定和索引的数字顺序相同”按我的理解就是在按“写”的顺序而这并不一定是//索引的顺序(书册上还有还有ksort()后的例子,时间关系就不说了,有兴趣的兄弟可以自己找着看下)
y%i}q"T p*J
udP3U1l&? //好preg_replace()就扯到着,开是扯下一个ereg_replace()
9W!~-{`6\v*J(z%Q //---------------------ereg_replace()------------------
;xZ4qNq
(]Z2E,}0_0ai'W2D //1.进行字符串的查找的替换
x8c,~'rWM         $str        = "daoyu shi ge hao hai zi 5555";
t/o9ke(Sr O         $pattern    = "[a-zA-Z]+";          //如果写成$pattern= "/[a-zA-Z]+/"; 将不做任何替换也就是说这里不能用正则“/”(可能就是着两个函数的第一个区别 :))
m`.s2YHhTN)R         $str              = ereg_replace($pattern,'~',$str);:R g7eL.Af"M&PLI
        echo $str."<br>";1U Q4l(qXgV
/*打印?5[[Vd&X
        ~ ~ ~ ~ ~ ~ 5555
7}$]:n4I&b8ug2lA[ */
"APD-{{U6_ //2.对字符串的逆向引用
1?:_ nr4]!\Co,B~ //在用下书册上的例子
5Pe3Hj4d b.H*p         $string = "This is a test";
KfUA)mi8{!\#I6N [ //echo ereg_replace("( )is", "\1was", $string); //“\1”匹配”(空格)is“ 这部分的空格,换句话说就是”替换为数字表示的的第几个括号内//的子串“ 7K+e#`&zz H^

C8} [ ]p0q9Rm         echo ereg_replace("(( )is)", "\2was", $string)."<br>"; KR J A(p
/*打印
+f5\R6Z5u,{@p         This was a test!J9D#}'Ej"c
*/g%wz1hM3q4X
//对上面的使用还有疑惑的兄弟可参考写这篇文章[url]http://elma.9iec.com/index.php?job=art&articleid=a_20051104_175700[/url]
0m#jD1p-x9Zk $string = "The quick brown fox jumped over the lazy dog."; kYK9`/z.Cj
7}4F ic3S:x
        $patterns[0] = "/quick/";
Apb2E Wa         $patterns[1] = "/brown/";
}e#f_MB|l         $patterns[2] = "/fox/";
X+i&l0G} Fd2W"M+o@]9Lf:T
        $replacements[2] = "bear";
^.vC~ w%e SK         $replacements[1] = "black";i^q;z2j&~] |'ZC
        $replacements[0] = "slow";
0g)@h"` D;rL%B6Zi
;GS!gkf9IK1OL         print ereg_replace($patterns, $replacements, $string)."<br>"; F+bQ4iZ7y I
//总结
@ lD+S8e/h;`)tX%e //1 preg_replace()里面的正则可以写成型如:"/..../"而ereg_replace()里面的正则需写成型如".....";i'Pn)m6](bL f
//2 preg_replace()能操作数组,而ereg_replace()不可以
:x(cDL_ i //3在逆向引用用preg_replace()可使用0-99个,而ereg_replace()最多为9个u~om+Er?\6]

+f e5LC`(q //在使用过程中感觉两者的区别不是很大,在功能上也比较相似..
R"p-J{N Um O w/_ l AMaL_m

/UZMR'A@u ?>
A G SCQ:U
X.BY3K3U!NhT 速度上preg*是ereg*的二倍x_ E+P$|b
而且preg*比ereg*支持更多的东西

页: [1]

Powered by Discuz! Archiver 7.0.0  © 2001-2009 Comsenz Inc.