正则表达式性能优化方法(高效正则表达式书写)_正则表达式

这里说的正则表达式优化,主要是针对目前常用的NFA模式正则表达式,详细可以参考:正则表达式匹配解析过程探讨分析(正则表达式匹配原理)。从上面例子,我们可以推断出,影响NFA类正则表达式(常见语言:GNU Emacs,Java,ergp,less,more,.NET语言,
PCRE library,Perl,PHP,Python,Ruby,sed,vi )其实主要是它的“回溯”,减少“回溯”次数(减少循环查找同一个字符次数),是提高性能的主要方法。 我们来看个例子:

源字符串:<script type="text/javascript">adsfadfsdasfsdafdsfsadfsa</script>

匹配要求,匹配<script….>….</script>标签里面所有内容,包括改标签

常见写法(1),因为<script后面可能出现字符、空白、特殊符号等,还有标签里面也可能出现各种js代码。我们简单方法是:

正则表达式:<script.*?>.*?</script> (测试工具使用了:regexBuddy)

总共花费115步,回溯了:48次。 因为我们使用”.”字符,匹配默认情况下除了\n之外所有字符。
方法(2),我们分析特点发现,<script…>后面,应该是除了”>”之外都可以字符,然后一对<script>标签里面js内容。可以定义为除了”<”之外。(这里面我只是举例说明优化方法,实际网页中script标签里面,常见都会出现有”<”字符了)

正则表达式:<script[^?>]+>[^<]+</script>

19步,0次回溯! ,步骤只有原先的15%左右,性能几倍的提升了!
从上面我们看到,不同正则表达式,对通用字符配平,性能相差会很大。减少“回溯”是最好的方法,减少回溯其中最主要的方法是:”用最小范围的元字符,尽量避免用过大的元字符!”。一般规律如下:

1、使用正确的边界匹配器(^、$、\b、\B等),限定搜索字符串位置
2、使用具体的元字符、字符类(\d、\w、\s等) ,少用”.”字符
3、使用正确的量词(+、*、?、{n,m}),如果能够限定长度,匹配最佳
4、使用非捕获组、原子组,减少没有必要的字匹配捕获用(?:)

如:我想匹配一些英文字母,它后面接的是数字。如:abc1234,我可以写 “\w+\d+”,也可以写”[a-zA-Z]+\d+” ,其中第一个\w+会先匹配所有abc1234,然后回溯,匹配满足\d+格式。一共4步,而后面这个只需要2步,步骤减少一半了!好了,今天就先到这里,欢迎大家讨论、交流!

时间: 2024-12-30 13:13:58

正则表达式性能优化方法(高效正则表达式书写)_正则表达式的相关文章

正则表达式性能优化方法(高效正则表达式书写)

这里说的正则表达式优化,主要是针对目前常用的NFA模式正则表达式,详细可以参考:正则表达式匹配解析过程探讨分析(正则表达式匹配原理).从上面例子,我们可以推断出,影响NFA类正则表达式(常见语言:GNU Emacs,Java,ergp,less,more,.NET语言, PCRE library,Perl,PHP,Python,Ruby,sed,vi )其实主要是它的"回溯",减少"回溯"次数(减少循环查找同一个字符次数),是提高性能的主要方法. 我们来看个例子:

MySQL order by性能优化方法实例

  这篇文章主要介绍了MySQL order by性能优化方法实例,本文讲解了MySQL中order by的原理和优化order by的三种方法,需要的朋友可以参考下 前言 工作过程中,各种业务需求在访问数据库的时候要求有order by排序.有时候不必要的或者不合理的排序操作很可能导致数据库系统崩溃.如何处理好order by排序呢?本文从原理以及优化层面介绍 order by . 一 MySQL中order by的原理 1 利用索引的有序性获取有序数据 当查询语句的 order BY 条件和

MySQL Index Condition Pushdown(ICP)性能优化方法实例

  这篇文章主要介绍了MySQL Index Condition Pushdown(ICP)性能优化方法实例,本文讲解了概念介绍.原理.实践案例.案例分析.ICP的使用限制等内容,需要的朋友可以参考下 一 概念介绍 Index Condition Pushdown (ICP)是MySQL 5.6 版本中的新特性,是一种在存储引擎层使用索引过滤数据的一种优化方式. a 当关闭ICP时,index 仅仅是data access 的一种访问方式,存储引擎通过索引回表获取的数据会传递到MySQL Ser

MySQL延迟关联性能优化方法

  这篇文章主要介绍了MySQL延迟关联性能优化方法,本文讲解了延迟关联的背景.延迟关联的分析.延迟关联的解决等内容,需要的朋友可以参考下 [背景] 某业务数据库load 报警异常,cpu usr 达到30-40 ,居高不下.使用工具查看数据库正在执行的sql ,排在前面的大部分是: 代码如下: SELECT id, cu_id, name, info, biz_type, gmt_create, gmt_modified,start_time, end_time, market_type, b

页面性能优化方法以及原理

问题描述 页面性能优化方法以及原理 页面性能优化方法都有哪些,以及背后的原理,请大神帮我解释一下 解决方案 负载均衡 cdn 页面缓存 预编译 解决方案二: 找**高性能网站建设指南.pdf**这本书看看 解决方案三: css放头部,js放尾部,静态资源使用其他域名,使用强缓存配合自动化构建,js模块化,js.css压缩,开启gzip压缩,cdn,反向代理,页面静态化--

基于调度器的Hadoop性能优化方法研究

基于调度器的Hadoop性能优化方法研究 刘娟: 豆育升: 何晨: 唐红 为了提高Hadoop调度器的调度性能,缩短Hadoop集群的任务整体响应时间,提出了一种基于CPU占用率的动态调度改进算法.首先对Hadoop传统的性能优化方法进行了对比,指出其存在问题的关键是缺乏动态性和灵活性.在此基础上,深入分析Hadoop默认任务调度模型,提出了一种以CPU占用率作为负载指标,在循环分配任务时根据反馈的负载指标判断节点负载情况的算法,动态适应负载变化.实验结果表明,该算法在Hadoop集群中,能有效

正则表达式regular expression详述(二)_正则表达式

正则表达式详述(二)     以下这些不是正则表达式的新增对象请参阅对应的JavaScript对象的属性    $_属性    参考input    $*属性    参考multiline    $&属性    参考lastMatch    $+属性    参考lastParen    $`属性    参考leftContext    $'属性    参考rightContext     compile方法    在脚本运行期间编译正则表达式对象    属于RegExp的方法     在Java

在ASP中用“正则表达式对象”来校验数据的合法性_正则表达式

我们在制作网站的时候,尤其是各种电子商务网站,首先都会让用户填写一些表格来获取注册用户的各种信息,因为用户有可能输入各式各样的信息,而有些不符合要求的数据会给我们的后端ASP处理程序带来不必要的麻烦,甚至导致网站出现一些安全问题.因此我们在将这些信息保存到网站的数据库之前,要对这些用户所输入的信息进行数据的合法性校验,以便后面的程序可以安全顺利的执行.所以我们一般会在后端编写一个ASP的校验程序来分析用户输入的数据是否是合法的. 或许有人会问了,使用运行在客户端的JavaScript不是可以更好

正则表达式regular expression详述(一)_正则表达式

 正则表达式是regular expression,看来英文比中文要好理解多了,就是检查表达式符不符合规定!!正则表达式有一个功能十分强大而又十分复杂的对象RegExp,在JavaScript1.2 版本以上提供.    下面我们看看有关正则表达式的介绍:    正则表达式对象用来规范一个规范的表达式(也就是表达式符不符合特定的要求,比如是不是Email地址格式等),它具有用来检查给出的字符串是否符合规则的属性和方法.    除此之外,你用RegExp构造器建立的个别正则表达式对象的属性,就已经