Forgot password?
AstroSophia
AstroSophia

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

解释:字符串比对解析并取代。
语法: mixed preg_replace(mixed pattern, mixed replacement, mixed subject);
返回值: 混合类型资料
函数种类: 资料处理
内容说明: 本函数以 pattern 的规则来解析比对字符串 subject,欲取而代之的字符串为参数 replacement。返回值为混合类型资料,为取代后的字符串结果。

<?php
//preg_replace()和ereg_replace()函数的使用的比较
// -------preg_replace()--------------------------
//1.进行字符串的查找的替换
$str = "daoyu shi ge hao hai zi 5555";
$pattern = "/\s/"; //如果将变量定义为$pattern_1会出错
$str = preg_replace($pattern,'-',$str);
echo $str."
";
/*打印:
daoyu-shi-ge-hao-hai-zi-5555
*/
//2.对字符串的逆向引用
//方法一
$pat = "/(\w+)-(\w+)-(\w+)-(\w+)-(\w+)-(\w+)-(\d+)/i";
$str =preg_replace($pat,"\$1",$str);
echo $str."
";
/*打印:
daoyu
*/
//注意:如果是下面这种形式你会发现匹配的是:zi- 所以可以这样认为在有次数的{6}的情况下,他($1)匹配的是最后一次
$pat = "/((\w+)-){6}(\d+)/i";
$str =preg_replace($pat,"\$1",$str);
echo $str."
";
/*打印:
zi-
*/

//方法二
$str = "daoyu-shi-ge-hao-hai-zi-5555";
$pat = "/(\w+)-(\w+)-(\w+)-(\w+)-(\w+)-(\w+)-(\d+)/i";
$str =preg_replace($pat,"\\1",$str);
echo $str."
";
/*打印:
daoyu
*/
//注意:当正则写成$pat= "/((\w+)-){6}(\d+)/i";时和上面的情况一样
//3 当参数是数组的情况(用下手册的例子)
$string = "The quick brown fox jumped over the lazy dog.";

$patterns[0] = "/quick/";
$patterns[1] = "/brown/";
$patterns[2] = "/fox/";

$replacements[2] = "bear";
$replacements[1] = "black";
$replacements[0] = "slow";

print preg_replace($patterns, $replacements, $string)."
";
/*打印
The bear black slow jumped over the lazy dog.
*/
//或许你已经发现了,他是按“将以其键名在数组中出现的顺序来进行处理。这不一定和索引的数字顺序相同”按我的理解就是在按“写”的顺序而这并不一定是//索引的顺序(书册上还有还有ksort()后的例子,时间关系就不说了,有兴趣的兄弟可以自己找着看下)

//好preg_replace()就扯到着,开是扯下一个ereg_replace()
//---------------------ereg_replace()------------------

//1.进行字符串的查找的替换
$str = "daoyu shi ge hao hai zi 5555";
$pattern = "[a-zA-Z]+"; //如果写成$pattern= "/[a-zA-Z]+/"; 将不做任何替换也就是说这里不能用正则“/”(可能就是着两个函数的第一个区别 :))
$str = ereg_replace($pattern,'~',$str);
echo $str."
";
/*打印
~ ~ ~ ~ ~ ~ 5555
*/
//2.对字符串的逆向引用
//在用下书册上的例子
$string = "This is a test";
//echo ereg_replace("( )is", "\\1was", $string); //“\\1”匹配”(空格)is“ 这部分的空格,换句话说就是”替换为数字表示的的第几个括号内//的子串“

echo ereg_replace("(( )is)", "\\2was", $string)."
";
/*打印
This was a test
*/
//对上面的使用还有疑惑的兄弟可参考写这篇文章http://elma.9iec.com/index.php?job=art&articleid=a_20051104_175700
$string = "The quick brown fox jumped over the lazy dog.";

$patterns[0] = "/quick/";
$patterns[1] = "/brown/";
$patterns[2] = "/fox/";

$replacements[2] = "bear";
$replacements[1] = "black";
$replacements[0] = "slow";

print ereg_replace($patterns, $replacements, $string)."
";
//总结
//1 preg_replace()里面的正则可以写成型如:"/..../"而ereg_replace()里面的正则需写成型如".....";
//2 preg_replace()能操作数组,而ereg_replace()不可以
//3在逆向引用用preg_replace()可使用0-99个,而ereg_replace()最多为9个

//在使用过程中感觉两者的区别不是很大,在功能上也比较相似..

?>