在编写脚本引擎时,我有像(伪代码)
这样的函数function is_whitespace?(char c){
return c==' ' || c=='\t' || c=='\r' || c=='\n';
}
嗯,我的问题是大多数langugaes哪个更快?那或者使用正则表达式
function is_whitespace?(char c){
return regex_match('\s',c);
}
我关注的主要语言是C#,C和Ruby,以防它完全依赖于平台。
答案 0 :(得分:12)
当然,与构建,运行和销毁状态机相比,对小块内存的四次比较要快得多(并且几乎不使用内存)。
答案 1 :(得分:3)
手动比较执行起来更快,正则表达式比较更快。
请注意,如果您的系统使用Unicode,则您的两个实现不等效。正则表达式\s
匹配所有Unicode空白,而手动比较仅处理基本ASCII,甚至不包括垂直制表符和换页符,这些字符通常也被视为空格。
如果您使用高级语言编写本文,我建议您使用编程语言库提供的is_whitespace()函数。几乎总是包括这样的基本功能。
所以最后答案是“它取决于”。在某些情况下,保证使用过程代码的额外编程工作。在许多情况下,正则表达式足够快且易于维护。
答案 2 :(得分:1)
在大多数情况下,找到类似空格字符的正则表达式非常快。在领先的正则表达式实现中,您有很多关注性能的眼球,并且在代码的其他方面可能存在其他“低挂果”区域以进行优化。
正则表达式表现不佳的领域是写得不好的正则表达式。提示是尽可能避免不必要的回溯,分组和更改。使用像“Regex Buddy”或Perl这样的“使用重新调试”来查看正则表达式所占的分支数。
这些链接涉及一些正则表达式性能问题。
如果有疑问,请做比较时间......
答案 3 :(得分:1)
在磁盘使用之后,当我分析我的代码时,正则表达式几乎总是我的性能瓶颈。即使对于简单的事情,例如.split(“”)。
答案 4 :(得分:0)
我不能谈论C#或C,但我不认为Ruby中的非正则表达式更快。</ p>