`
xitong
  • 浏览: 6193929 次
文章分类
社区版块
存档分类
最新评论

正则表达式工作原理

 
阅读更多

粗浅地编写正则表达式是造成性能瓶颈的主要原因,但还有很多可以改进正则表达式效率的地方。两个正则表达式匹配相同的文本并不意味着他们具有同等的速度。
许多因素影响正则表达式的效率,首先,正则表达式适配的文本千差万别,部分匹配时比完全不匹配所用的时间要长。每种浏览器的正则表达式引擎也有不同的内部优化。
为了有效地使用正则表达式,重要的是理解它们的工作原理。下面是一个正则表达式处理的基本步骤:
第一步:编译
当你创建了一个正则表达式对象之后(使用一个正则表达式直接量或者RegExp构造器),浏览器检查你的模板有没有错误,然后将它转换成一个本机代码例程,用于执行匹配工作。如果你将正则表达式赋给一个变量,你可以避免重复执行此步骤。
第二步:设置起始位置

当一个正则表达式投入使用时,首先要确定目标字符串中开始搜索的位置。它是字符串的起始位置,或由正则表达式的lastIndex属性指定,但是当它从第四步返回到这里的时候(因为尝试匹配失败),此位置将位于最后一次尝试起始位置推后一个字符的位置上。
浏览器优化正则表达式引擎的办法是,在这一阶段中通过早期预测跳过一些不必要的工作。例如,如果一个正则表达式以^开头,IE 和Chrome通常判断在字符串起始位置上是否能够匹配,然后可避免愚蠢地搜索后续位置。另一个例子是匹配第三个字母是x的字符串,一个聪明的办法是先找到x,然后再将起始位置回溯两个字符。
第三步:匹配每个正则表达式的字元
正则表达式一旦找好起始位置,它将一个一个地扫描目标文本和正则表达式模板。当一个特定字元匹配失败时,正则表达式将试图回溯到扫描之前的位置上,然后进入正则表达式其他可能的路径上。
第四步:匹配成功或失败
如果在字符串的当前位置上发现一个完全匹配,那么正则表达式宣布成功。如果正则表达式的所有可能路径都尝试过了,但是没有成功地匹配,那么正则表达式引擎回到第二步,从字符串的下一个字符重新尝试。只有字符串中的每个字符(以及最后一个字符后面的位置)都经历了这样的过程之后,还没有成功匹配,那么正则表达式就宣布彻底失败。
牢记这一过程将有助于您明智地判别那些影响正则表达式性能问题的类型。



转自:http://www.cnblogs.com/aaronjs/archive/2012/06/30/2570800.html

分享到:
评论

相关推荐

    正则表达式经典实例

    通过一个精练的教程理解正则表达式的基本原理和技巧; 在不同的编程语言和脚本语言中有效使用正则表达式; 学习如何对输入进行合法性检查和格式化; 处理单词、文本行、特殊字符和数值; 学习如何在uRL、路径、...

    正则表达式核心原理精讲

    正则表达式是软件开发中一块非常重要的内容,特别在linux下进行软件开发更是如此,本资源提供了对正则表达式原理以及使用方法的介绍,可以让用户很快熟悉并掌握,值得学习!推荐指数10.

    正则表达式 到 NFA

    这是编译原理的一个实验, 是把一个正则表达式转化为不确定有穷自动机NFA的算法程序,朋兴趣的朋友可以下载来看看哦. 一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式...

    精通正则表达式 中英文

     本书讲解正则表达式,这种工具能够提高工作效率、让生活变得更轻松。精心调校后的正则表达式只需要十多秒就能完成以前数小时才能完成的枯燥任务。如今,正则表达式已经成为众多语言及工具——Perl、PHP、Java、...

    《正则表达式经典实例》扫描版

     通过一个精练的教程理解正则表达式的基本原理和技巧;  在不同的编程语言和脚本语言中有效使用正则表达式;  学习如何对输入进行合法性检查和格式化;  处理单词、文本行、特殊字符和数值;  学习如何在URL、...

    编译原理正则表达式转NFA转DFA DFA最小化 Cpp代码

    编译原理课的大作业 包含三个小实验 在一个cpp文件里 正则表达式转换为nfa nfa转换为dfa dfa最小化 个人原创代码

    精通正则表达式(第三版)

    《精通正则表达式(第3版)》讲解正则表达式,这种工具能够提高工作效率、让生活变得更轻松。精心调校后的正则表达式只需要十多秒就能完成以前数小时才能完成的枯燥任务。如今,正则表达式已经成为众多语言及工具--...

    精通正则表达式(第三版)

    《精通正则表达式(第3版)》讲解正则表达式,这种工具能够提高工作效率、让生活变得更轻松。精心调校后的正则表达式只需要十多秒就能完成以前数小时才能完成的枯燥任务。如今,正则表达式已经成为众多语言及工具——...

    正则表达式DFA原理

    正则表达式DFA原理正则表达式DFA原理正则表达式DFA原理正则表达式DFA原理

    精通正则表达式(第3版)(含awz3 mobi epub)

    本书主要讲解了正则表达式的特性和流派、匹配原理、优化原则、实用诀窍以及调校措施,并详细介绍了正则表达式在Perl、Java、.NET、PHP中的用法。 本书自第1 版开始着力于教会读者“以正则表达式来思考”,来让读者...

    精通正则表达式(第3版) epub格式 带目录 精排极致版 猫头鹰的那本

    本书主要讲解了正则表达式的特性和流派、匹配原理、优化原则、实用诀窍以及调校措施,并详细介绍了正则表达式在Perl、Java、.NET、PHP中的用法。 本书自第1 版开始着力于教会读者“以正则表达式来思考”,来让读者...

    常用正则表达式生成软件 学习文档

    包含自动生成常用的正则表达式,如邮件地址、网址、ip、url、数字等等 还有正则表达式的学习帮助文档,让你好好学习正则表达式 ...这里只是让你明白基本的原理,以后你还需要多练习,多使用,才能熟练掌握正则表达式。

    正则表达式完整高清版

    第二部分主要讲解关于正则表达式的更深入的知识,详细探讨了编码问题、匹配原理、解题思路;第三部分将之前介绍的各种知识落实到6种常用语言.net、java、javascript、php、python、ruby中,不但详细介绍了语言中正则...

    [精通正则表达式(第3版)]中文版.(美)Jeffrey.E.F.Friedl-part1.rar

    本书讲解正则表达式,这种工具能够提高工作效率、让生活变得更轻松。精心调校后的正则表达式只需要十多秒就能完成以前数小时才能完成的枯燥任务。如今,正则表达式已经成为众多语言及工具——Perl、PHP、Java、...

    正则表达式到NFA

    编译原理的一个实验,正则表达式到NFA

    正则表达式转NFA

    课程设计 正规式构造nfa.这是编译原理的一个实验, 是把一个正则表达式转化为不确定有穷自动机NFA的算法程序,朋兴趣的朋友可以下载来看看哦。

    (文字版非扫描)《精通正则表达式 》[美]Jeffrey E·F·Friedl(PDF)

    本书主要讲解了正则表达式的特性和流派、匹配原理、优化原则、实用诀窍以及调校措施,并详细介绍了正则表达式在Perl、Java、.NET、PHP中的用法。 本书自第1 版开始着力于教会读者“以正则表达式来思考”,来让读者...

    精通正则表达式

    本书主要讲解了正则表达式的特性和流派、匹配原理、优化原则、实用诀窍以及调校措施,并详细介绍了正则表达式在Perl、Java、.NET、PHP中的用法。, 本书自第1 版开始着力于教会读者“以正则表达式来思考”,来让读者...

    精通正则表达式(第3版) 英文版

    本书讲解正则表达式,这种工具能够提高工作效率、让生活变得更轻松。精心调校后的正则表达式只需要十多秒就能完成以前数小时才能完成的枯燥任务。如今,正则表达式已经成为众多语言及工具——Perl、PHP、Java、...

Global site tag (gtag.js) - Google Analytics