在阅读了java中关于正则表达式优化的很好的article之后,我想知道创建快速有效的正则表达式的其他好技巧是什么?
发布于 2012-03-19 21:51:58
当您需要重复分组但又不需要使用来自传统(capturing)组的捕获值时,
(?:pattern)。通过将正则表达式设计为针对catastrophic backtracking提前终止,
我制作了一个演示这些技术的视频。我从catastrophic backtracking文章(x+x+)+y中写得非常糟糕的正则表达式开始。然后在一系列的优化之后,我使它的速度提高了300万倍,每次更改后都进行基准测试。该视频特定于.NET,但其中许多内容也适用于大多数其他正则表达式风格:
.NET Regex Lesson: #5: Optimization
发布于 2009-08-09 20:37:40
谨慎地使用any (点)操作符,如果你可以用其他任何方法,那就去做吧,点总是会咬你的……
我不确定PCRE是否是NFA,我只熟悉PCRE,但默认情况下+和*通常是贪婪的,它们将尽可能多地匹配以扭转局面使用+?然后*?为了尽可能少地匹配,请在编写regexp时牢记这两个子句。
发布于 2009-08-10 04:43:53
知道什么时候不使用正则表达式--有时手工编码的解决方案更有效,更容易理解。
例如:假设您想匹配一个能被3整除的整数,设计一个有限状态机来完成这个任务很简单,因此必须存在一个相应的正则表达式,但是把它写出来并不是那么简单--我当然讨厌调试它!
https://stackoverflow.com/questions/1252194
复制相似问题