'正则表达式'VS'字符串比较运算符/函数'这道题是围绕PHP中的性能设计的,但是如果你随意将它扩展到任何语言。在多年使用PHP并不得不比较字符串之后,我了解到使用字符串比较运算符而不是正则表达式在性能方面具有优势。我完全理解某些必须使用正则表达式完成的操作的复杂性,但对于可以使用正则表达式和字符串函数解决的操作。例如:PHPpreg_match('/^[az]*$/','thisisallalpha');C#newRegex("^[az]*$").IsMatch('thisisallalpha');可以使用PHPctype_alpha('thisisallalpha')轻松完成;C#VFPToolkit.Strings.IsAlpha('thisisallalpha');还有很多其他的例子,但你应该得到我想要的。您应该尝试使用哪种版本的字符串比较?为什么?看起来这个问题来自我们在这里的一个小争论,所以我觉得有必要以某种方式做出回应。PHP开发人员正在积极洗脑“性能”,并且出现了许多谣言和神话,包括像“双引号”这样纯粹愚蠢的东西。正则表达式“慢”是这些神话之一,不幸的是手册支持(参见preg_match页面上臭名昭著的评论)。事实上,在大多数情况下,您并不关心。除非您的代码重复10,000次,否则您甚至不会注意到字符串函数和正则表达式之间的区别。如果您的代码重复10,000次,那么无论如何您一定做错了什么,您将通过优化您的逻辑来获得性能,而不是通过剥离正则表达式。至于可读性,正则表达式很难阅读,但是,在大多数情况下,使用它们的代码更短、更简洁(在上面的链接中比较你和我的答案)。另一个重要的问题是灵活性,特别是在PHP中,其字符串库不支持开箱即用的unicode。在您的具体示例中,当您决定将站点迁移到utf8时会发生什么情况?使用ctype_alpha你运气不好,preg_match需要另一种模式,但会继续工作。因此,正则表达式并不慢,可读性更好,也更灵活。我们为什么要避开它们?当正则表达式可以替代多个原语字符串比较时,它们实际上会带来性能提升(并不是说这种微优化在任何方面都是明智的)。所以通常大约五次strpos()检查,建议使用正则表达式。更重要的是可读性。另一个想法:PCRE可以比Zend核心处理IF字节码更快地处理条件。但是,并非所有的正则表达式都是一样的。如果复杂度太高,正则表达式递归会破坏其性能优势。因此,将正则表达式匹配与常规PHP字符串函数混合使用通常值得重新考虑。适合这项工作的工具。PHP本身建议在匹配简单时使用字符串函数而不是正则表达式函数。例如,来自preg_match手册页:如果您只想检查一个字符串是否包含在另一个字符串中,请不要使用preg_match()。使用strpos()或strstr()会更快。或者来自str_replace手册页:如果您不需要花哨的替换规则(如正则表达式),您应该始终使用此函数而不是ereg_replace()或preg_replace()。但是,我发现人们试图使用字符串函数来解决正则表达式可以更好地解决的问题。例如,当我试图创建一个完整的字符串匹配器时,我遇到了试图使用strpos($string,"$word")(注意空格)的人,并且无法停止思考空格为什么不是描述性单词对于“性能”的唯一方法(想一想完全替换preg_match('/bwordb/',$string)需要调用多少个字符串函数)。我个人的立场是使用字符串函数来匹配静态字符串(即匹配始终相同的不同字符序列的匹配),并在其他所有内容上使用正则表达式。同意PHP人员倾向于过分强调一个函数的性能而不是另一个函数。这并不意味着性能差异不存在——它们确实存在——但大多数PHP代码(实际上是大多数代码)是比正则表达式比字符串比较选项更严重的瓶颈。要找出瓶颈在哪里,请使用xdebug的分析器。在担心对个别代码行进行微调之前,先解决它的问题。它们都是语言的一部分是有原因的。IsAlpha更具表现力。例如,当您正在查看的表达式本质上是alpha或没有域含义时使用它。但是,例如,如果它是输入验证,并且可能会更改为包括下划线、破折号等,或者如果它需要具有其他逻辑的正则表达式,那么我会使用正则表达式。对我来说,这往往是大部分时间。以上就是C#学习教程分享的全部内容:'正则表达式'VS'字符串比较运算符/函数'。如果对你有用,需要了解更多C#学习教程,希望大家多加关注——本文来自网络合集,不代表立场,如涉及侵权,请点击有权联系管理员删除。如需转载请注明出处:
