优化正则表达式的诀窍

常识性优化

  1、避免重新编译

  编译和定义正则表达式的次数应尽可能的少。

  2、使用非捕获型括号

  如果不需要引用括号内的文本,请使用非捕获型括号(?:...)。这样不但能节省捕获的时间,而且会减少回溯使用的状态的数量,从两方面提高速度。而且能够进一步的优化,例如消除务必要括号。

  3、不要滥用括号

  在需要的时候使用括号,在其他时候使用括号会阻止某些优化措施。除非你需要知道.*匹配的最后一个字符,否则请不要使用(.*)。

  4、不要滥用字符组

  例如 ^.*[:] 这样会付出处理字符组的代价,而实际上这个式子并需不要用到字符组提供的多字符匹配功能,我认为,当一个字符是元字符时例如 . 或 * 应该使用\.或\*表示,在比如需要 [Ff],应当使用不缺分大小写的匹配,而不是字符组。

  5、使用起始锚点  

  除非是及其罕见的情况,否则以 .* 开头的正则表达式都应该在最前面添加 ^ 或者\A 如果这个正则表达式在某个字符串的开头不能匹配,那么显然在其他位置它也不能匹配。添加锚点无论是手工添加还是通过优化自动添加都能够配合开头字符/字符串/字串识别优化,节省大量不必要的工作。

将文本独立出来

  1、从量词中提取必须的元素

  用 xx* 替代 x+ 能够暴露必须匹配的 x 同样,用-----{0,2}代替-{5,7}。

  2、提取多选结构开头的必须元素

  用th(?:is|at)替代(?:this|that),就能暴露出必须的th。如果不同的多选分支的结尾部分相同,我们也可以从右面"提取"。例如(?:optim|standard)ization  。

将锚点独立出来

  1、在表达式前面独立出 ^ 和 \G

   ^(?:abc|123)和(^abc|^123)在逻辑上是等价的,但是许多正则引擎指挥对第一个表达式使用开头字符/字符串/字串识别优化。所以第一种办法的效率高得多。

  2、在表达式末尾独立出$

  虽然 abc$|123$ 和 (?:abc|123)$ 在逻辑上是等价的,但优化的表现可能不同。目前只对Perl有效。

时间: 2024-10-18 14:40:48

优化正则表达式的诀窍的相关文章

python正则表达式

本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程. 注意:本文基于Python2.4完成:如果看到不明白的词汇请记得百度谷歌或维基,whatever. 尊重作者的劳动,转载请注明作者及原文地址 >.<html 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法

Python正则表达式指南

本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程. 注意:本文基于Python2.4完成:如果看到不明白的词汇请记得百度谷歌或维基,whatever. 尊重作者的劳动,转载请注明作者及原文地址 >.< [原文链接]http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 1. 正则表

如何优化网站关键词.

第一点:做好关键词分析(也叫关键词定位):这是进行SEO优化最重要的一环,关键词分析包括:关键词注重量分析.竞争对手分析.关键词与网站相关性分析.关键词安顿.关键词排行猜想. 第二点:网站架构分析:网站结构符合搜索引擎的爬虫喜欢则有利于SEO优化.网站架构分析包括:除去网站架构不良计划.完结树状目录结构.网站导航与衔接优化,网站计划的言语最好采好DIV+CSS样式,代码很有层次和简练. 第三点:与搜索引擎对话:向各大搜索引擎登入进口提交没有录入站点.在搜索引擎看SEO的效果,通过site:你的域

python正则表达式教程

原文这里,非常实用,转载一下 本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程. 注意:本文基于Python2.4完成:如果看到不明白的词汇请记得百度谷歌或维基,whatever. 尊重作者的劳动,转载请注明作者及原文地址 >.<html 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串

Python re正则表达式模块学习【转】

感谢原作者,本文转自:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 博主还有一些比较好的python文档在此一并推荐,可以移步查看. 文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程. 注意:本文基于Python2.4完成:如果看到不明白的词汇请记得百度谷歌或维基,whate

C#中的正则表达式中的replace方法【转载】

C#中的正则表达式 其中如果包含的字符串中包含双引号,那么就两个双引号表示,而不是反斜杠加上双引号(\”),也不是斜杠加上双引号(/”)   正则表达式获取CSS里面的图片的例子,里面有URL里面的图片地址有双引号,要注意用两个双引号""表示 static void Main(string[] args) { Regex reg = new Regex(@"url\((['""]?)(.+[^'""])\1\)"); //注意

C#中的正则表达式

其中如果包含的字符串中包含双引号,那么就两个双引号表示,而不是反斜杠加上双引号(\”),也不是斜杠加上双引号(/”)   正则表达式获取CSS里面的图片的例子,里面有URL里面的图片地址有双引号,要注意用两个双引号""表示 static void Main(string[] args) { Regex reg = new Regex(@"url\((['""]?)(.+[^'""])\1\)"); //注意里面的引号 要用双引

MongoDB 正则表达式

正则表达式是使用单个字符串来描述.匹配一系列符合某个句法规则的字符串. 许多程序设计语言都支持利用正则表达式进行字符串操作. MongoDB 使用 $regex 操作符来设置匹配字符串的正则表达式. MongoDB使用PCRE (Perl Compatible Regular Expression) 作为正则表达式语言. 不同于全文检索,我们使用正则表达式不需要做任何配置. 考虑以下 posts 集合的文档结构,该文档包含了文章内容和标签: { "post_text": "e

转:Python正则表达式指南

本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程. 注意:本文基于Python2.4完成:如果看到不明白的词汇请记得百度谷歌或维基,whatever. 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功