PHP ereg 和 preg 的区别

2024-06-20 21:38
文章标签 php 区别 preg ereg

本文主要是介绍PHP ereg 和 preg 的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先要说明的是在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.ereg默认使用贪婪模式,并且不能修改
5.preg 的速度比 ereg 要快很多
还有一些区别就需要自己慢慢发现了,总之preg完胜ereg。

 

 

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就可以了!

这篇关于PHP ereg 和 preg 的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1079328

相关文章

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

Python中@classmethod和@staticmethod的区别

《Python中@classmethod和@staticmethod的区别》本文主要介绍了Python中@classmethod和@staticmethod的区别,文中通过示例代码介绍的非常详细,对大... 目录1.@classmethod2.@staticmethod3.例子1.@classmethod

Golan中 new() 、 make() 和简短声明符的区别和使用

《Golan中new()、make()和简短声明符的区别和使用》Go语言中的new()、make()和简短声明符的区别和使用,new()用于分配内存并返回指针,make()用于初始化切片、映射... 详细介绍golang的new() 、 make() 和简短声明符的区别和使用。文章目录 `new()`

Python中json文件和jsonl文件的区别小结

《Python中json文件和jsonl文件的区别小结》本文主要介绍了JSON和JSONL两种文件格式的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下... 众所周知,jsON 文件是使用php JSON(JavaScripythonpt Object No

结构体和联合体的区别及说明

《结构体和联合体的区别及说明》文章主要介绍了C语言中的结构体和联合体,结构体是一种自定义的复合数据类型,可以包含多个成员,每个成员可以是不同的数据类型,联合体是一种特殊的数据结构,可以在内存中共享同一... 目录结构体和联合体的区别1. 结构体(Struct)2. 联合体(Union)3. 联合体与结构体的

什么是 Ubuntu LTS?Ubuntu LTS和普通版本区别对比

《什么是UbuntuLTS?UbuntuLTS和普通版本区别对比》UbuntuLTS是Ubuntu操作系统的一个特殊版本,旨在提供更长时间的支持和稳定性,与常规的Ubuntu版本相比,LTS版... 如果你正打算安装 Ubuntu 系统,可能会被「LTS 版本」和「普通版本」给搞得一头雾水吧?尤其是对于刚入

python中json.dumps和json.dump区别

《python中json.dumps和json.dump区别》json.dumps将Python对象序列化为JSON字符串,json.dump直接将Python对象序列化写入文件,本文就来介绍一下两个... 目录1、json.dumps和json.dump的区别2、使用 json.dumps() 然后写入文

PHP执行php.exe -v命令报错的解决方案

《PHP执行php.exe-v命令报错的解决方案》:本文主要介绍PHP执行php.exe-v命令报错的解决方案,文中通过图文讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录执行phpandroid.exe -v命令报错解决方案执行php.exe -v命令报错-PHP War

native和static native区别

本文基于Hello JNI  如有疑惑,请看之前几篇文章。 native 与 static native java中 public native String helloJni();public native static String helloJniStatic();1212 JNI中 JNIEXPORT jstring JNICALL Java_com_test_g

Android fill_parent、match_parent、wrap_content三者的作用及区别

这三个属性都是用来适应视图的水平或者垂直大小,以视图的内容或尺寸为基础的布局,比精确的指定视图的范围更加方便。 1、fill_parent 设置一个视图的布局为fill_parent将强制性的使视图扩展至它父元素的大小 2、match_parent 和fill_parent一样,从字面上的意思match_parent更贴切一些,于是从2.2开始,两个属性都可以使用,但2.3版本以后的建议使