首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex性能优化提示和技巧

Regex性能优化提示和技巧
EN

Stack Overflow用户
提问于 2009-08-09 20:27:47
回答 3查看 27.8K关注 0票数 24

在阅读了java中关于正则表达式优化的很好的article之后,我想知道创建快速有效的正则表达式的其他好技巧是什么?

EN

回答 3

Stack Overflow用户

发布于 2012-03-19 21:51:58

当您需要重复分组但又不需要使用来自传统(capturing)组的捕获值时,

  • 会使用非捕获组(?:pattern)。通过将正则表达式设计为针对catastrophic backtracking提前终止,

  • 会在适用的情况下使用atomic group (或非回退子表达式),就像瘟疫一样

我制作了一个演示这些技术的视频。我从catastrophic backtracking文章(x+x+)+y中写得非常糟糕的正则表达式开始。然后在一系列的优化之后,我使它的速度提高了300万倍,每次更改后都进行基准测试。该视频特定于.NET,但其中许多内容也适用于大多数其他正则表达式风格:

.NET Regex Lesson: #5: Optimization

票数 37
EN

Stack Overflow用户

发布于 2009-08-09 20:37:40

谨慎地使用any (点)操作符,如果你可以用其他任何方法,那就去做吧,点总是会咬你的……

我不确定PCRE是否是NFA,我只熟悉PCRE,但默认情况下+和*通常是贪婪的,它们将尽可能多地匹配以扭转局面使用+?然后*?为了尽可能少地匹配,请在编写regexp时牢记这两个子句。

票数 8
EN

Stack Overflow用户

发布于 2009-08-10 04:43:53

知道什么时候不使用正则表达式--有时手工编码的解决方案更有效,更容易理解。

例如:假设您想匹配一个能被3整除的整数,设计一个有限状态机来完成这个任务很简单,因此必须存在一个相应的正则表达式,但是把它写出来并不是那么简单--我当然讨厌调试它!

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1252194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档