我们经常被告知Regexps很慢,应该尽可能避免.
但是,考虑到自己做一些字符串操作的开销(不是谈论算法错误 - 这是另一回事),特别是在PHP或Perl(可能Java)是什么限制,在这种情况下我们可以认为字符串操作是更好的替代?什么regexp特别是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手工和特定算法不会更快(写入时间更长)?
编辑
问题的关键是要确定哪种regexp最好通过字符串操作专门针对给定问题重写?
EDIT2
一个常见的实现是Perl regexp.例如在Perl -需要知道它们是如何实现的-什么样的正则表达式的是要避免的,因为实现将使过程冗长和无效?它可能不是一个复杂的正则表达式......
编辑2011年7月(根据评论)
我并不是说所有正则表达式都很慢.已知一些特定的正则表达式模式是缓慢的,这是由于它们的特定处理以及由于它们的实现.
例如,在最近的Perl/PHP实现中,已知的是相当缓慢 - 应该避免?
答案是从那些已经进行了自己的研究(剖析器......)的人那里得到的,他们能够提供一些关于建议/要避免什么的一般指导.