【发布时间】:2011-04-06 08:32:54
【问题描述】:
我们经常被告知正则表达式很慢,应尽可能避免使用。
但是,考虑到自己进行一些字符串操作的开销(不是在谈论算法错误 - 这是另一回事),尤其是在 PHP 或 Perl 中(可能是 @987654323 @) 什么是limit,在这种情况下我们可以考虑字符串操作是一个更好的选择吗?哪些正则表达式特别占用 CPU?
例如,对于以下C++、Java、PHP 或Perl,您会推荐什么
正则表达式可能会更快:
-
s/abc/def/g或基于... while((i=index("abc",$x)>=0) ...$y .= substr()...的解决方案? -
s/(\d)+/N/g或扫描算法
但是呢
- 电子邮件验证正则表达式?
s/((0|\w)+?[xy]*[^xy]){2,7}/u/g
手工制作的特定算法会不会更快(同时编写时间更长)?
编辑
问题的重点是确定哪种正则表达式最好通过字符串操作专门针对给定问题重写?
edit2
一个常见的实现是 Perl 正则表达式。例如在 Perl 中 - 这需要知道它们是如何实现的 - 应该避免什么 种类 的正则表达式,因为实现会使过程变得冗长且无效?它可能不是一个复杂的正则表达式......
2011 年 7 月编辑(基于 cmets)
我并不是说所有的正则表达式都很慢。众所周知,某些特定的正则表达式模式很慢,因为它们的特定处理以及它们的实现。
例如,在最近的 Perl / PHP 实现中,已知的相当慢 - 应该避免?
已经进行了自己的研究(分析器......)并且能够提供关于建议/避免什么的一般指南的人应该会给出答案。
【问题讨论】:
-
我会说这应该是社区 Wiki,因为它本质上是主观的(可能会更快,你会推荐什么)。
标签: java php regex perl string