preg和ereg的区别
题记:在PHP5.3里边ereg家族要被preg代替了。在这里列一下它们的区别。
名词解释:
preg,代表“Perl的正则表达式(Perl Regular Expressions)”。
ereg,代表“扩展的正则表达式(Extended Regular Expressions)”。
区别:
1.preg_replace()里面的正则可以写成型如:"/..../"而ereg_replace()里面的正则需写成型如".....";
2.在逆向引用用preg_replace()可使用0-99个,而ereg_replace()最多为9个
3.preg_replace()能操作数组,而ereg_replace()不可以
4.其他区别(下面4条)
题记:在PHP5.3里边ereg家族要被preg代替了。在这里列一下它们的区别。
名词解释:
preg,代表“Perl的正则表达式(Perl Regular Expressions)”。
ereg,代表“扩展的正则表达式(Extended Regular Expressions)”。
区别:
1.preg_replace()里面的正则可以写成型如:"/..../"而ereg_replace()里面的正则需写成型如".....";
2.在逆向引用用preg_replace()可使用0-99个,而ereg_replace()最多为9个
3.preg_replace()能操作数组,而ereg_replace()不可以
4.其他区别(下面4条)
其他区别:
1.ereg里面是不需要也不能使用分隔符和修饰符的。
例子:/hello.+?hello/is 说明:分隔符,表达式和修饰符。
2.'.'在正则里面一般是除了换行符以外的全部字符,但是在ereg里面的'.'是任意字符,即包括换行符!如果在preg里面希望'.'能够包括换行符,可以在修饰符中加上's'。
3.ereg默认使用贪婪模式,并且不能修改。 贪婪模式例子:要匹配以"a"开头"b"结尾的字符串,但是需要匹配的字符串是"abbbbbbbbbbbbbbbbb",如果你使用了贪婪模式,那么会匹配到最后一个"b",反之只是匹配到第一个"b"。
4.preg的速度要远远比ereg快。
例子说明:
(注:以preg_replace()和ereg_replace()函数的使用为例)
1.进行字符串的查找的替换
A:PREG:
$str = "daoyu shi ge hao hai zi 5555";
$pattern = "/\s/"; 如果将变量定义为$pattern_1会出错
$str = preg_replace($pattern,'-',$str);
echo $str."<br>";
输出结果:daoyu-shi-ge-hao-hai-zi-5555
B:EREG:
$str = "daoyu shi ge hao hai zi 5555";
$pattern= "[a-zA-Z]+"; 如果写成$pattern= "/[a-zA-Z]+/"; 将不做任何替换也就是说这里不能用正则“/”(可能就是着两个函数的第一个区别 :))
$str = ereg_replace($pattern,'~',$str);
echo $str."<br>";
输出结果:~ ~ ~ ~ ~ ~ 5555
2.对字符串的逆向引用
A:PREG:
方法一
$pat = "/(\w+)-(\w+)-(\w+)-(\w+)-(\w+)-(\w+)-(\d+)/i";
$str =preg_replace($pat,"\$1",$str);
echo $str."<br>";
输出结果:daoyu
注意:如果是下面这种形式你会发现匹配的是:zi- 所以可以这样认为在有次数的{6}的情况下,他($1)匹配的是最后一次
$pat = "/((\w+)-){6}(\d+)/i";
$str =preg_replace($pat,"\$1",$str);
echo $str."<br>";
输出结果: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."<br>";
输出结果:daoyu
注意:当正则写成$pat= "/((\w+)-){6}(\d+)/i";时和上面的情况一样
B:EREG:
在用下书册上的例子
$string = "This is a test";
echo ereg_replace("( )is", "\\1was", $string); “\\1”匹配”(空格)is“ 这部分的空格,换句话说就是”替换为数字表示的的第几个括号内的子串“
echo ereg_replace("(( )is)", "\\2was", $string)."<br>";
输出结果:This was a test
3 当参数是数组的情况(手册的例子)
A:PREG:
$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)."<br>";
输出结果:The bear black slow jumped over the lazy dog.
或许你已经发现了,他是按“将以其键名在数组中出现的顺序来进行处理。这不一定和索引的数字顺序相同”按我的理解就是在按“写”的顺序而这并不一定是索引的顺序(书册上还有还有ksort()后的例子,时间关系就不说了,有兴趣的兄弟可以自己找着看下)
B:EREG:
不支持。