在PHP中使用与Perl兼容的正则表达式(3)

3、preg_split :
函数格式:array preg_split(string pattern, string subject, int [limit]);
这个函数和函数split一样,区别仅在与split可以使用简单正则表达式来分割匹配的字符串,而preg_split使用完全的Perl兼容正则表达式。第三个参数limit代表允许返回多少个符合条件的值。

4、preg_grep :
函数格式:array preg_grep(string patern , array input);
这个函数和preg_match功能基本上,不过preg_grep可以将给定的数组input中的所有元素匹配,返回一个新的数组。 下面举一个例子,比如我们要检查Email地址的格式是否正确:

<?php
function emailIsRight($email) {
    if (preg_match("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$",$email)) {
    return 1;
    }
    return 0;
}
if(emailIsRight('y10k@963.net')) echo '正确<br>';
if(!emailIsRight('y10k@fffff')) echo '不正确<br>';
?>

上面的程序会输出"正确<br>不正确"。

PHP中的Perl兼容正则表达式和Perl/Ereg正则表达式的区别

  虽然叫做“Perl兼容正则表达式”,但是和Perl的正则表达式相比,PHP的还是由一些不同,比如修饰符“G”在Perl里面代表全部匹配,但是在PHP中没有加入对这个修饰符的支持。
  还有就是和ereg系列函数的区别,ereg也是PHP中提供的正则表达式函数,不过和preg相比,要弱上很多。

  1、ereg里面是不需要也不能使用分隔符和修饰符的,所以ereg的功能比preg要弱上不少。
  2、关于".":点在正则里面一般是除了换行符以外的全部字符,但是在ereg里面的"."是任意字符,即包括换行符!如果在preg里面希望"."能够包括换行符,可以在修饰符中加上"s"。
  3、ereg默认使用贪婪模式,并且不能修改,这个给很多替换和匹配带来麻烦。
  4、速度:这个或许是很多人关心的问题,会不会preg功能强大是以速度来换取的?不用担心,preg的速度要远远比ereg快,笔者做了一个程序测试:

<?php
echo "Preg_replace used time:";
$start = time();
for($i=1;$i<=100000;$i++) {
    $str = "ssssssssssssssssssssssssssss";
    preg_replace("/s/","",$str);
}
$ended = time()-$start;
echo $ended;
echo "ereg_replace used time:";
$start = time();
for($i=1;$i<=100000;$i++) {
    $str = "ssssssssssssssssssssssssssss";
    ereg_replace("s","",$str);
}
$ended = time()-$start;
echo $ended;
echo "str_replace used time:";
$start = time();
for($i=1;$i<=100000;$i++) {
    $str = "sssssssssssssssssssssssssssss";
    str_replace("s","",$str);
}
$ended = time()-$start;
echo $ended;
?>

结果:
Preg_replace used time:5
ereg_replace used time:15
str_replace used time:2
str_replace因为不需要匹配所以速度非常快,而preg_replace的速度比ereg_replace要快上不少。

关于PHP3.0对于preg的支持

  在PHP 4.0中默认加入了preg支持,但是在3.0中确没有。如果在3.0中希望使用preg函数,必须加载php3_pcre.dll文件,只要在php.ini的extension部分设置加入"extension = php3_pcre.dll"然后从新启动PHP就可以了!

  其实正则表达式还常用于UbbCode的实现,很多PHP论坛都使用了这个方法(比如zForum zphp.com或者vB vbullent.com),但是具体的代码比较长。

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/df4fcfbf7f0000e753d749cf5d327a8d.html