正则表达式比if else语句更快吗?

4
我有一个用C++编写的Web服务器程序,用于处理来自浏览器的请求。这个程序有很多服务,比如论坛、维基和新闻等等,它们都有不同的URL,例如:
  1. /bbs/viewtopic?tid=1

  2. /wiki/doc?did=1

  3. /news/artical?aid=1

现在我自己解析URI,然后使用if else语句进行操作。以论坛为例,如果字符串以/bbs/开头,论坛将接管后续处理,然后继续检查是否是viewtopic,如果是,服务器将向客户端发送主题内容...
我有很多if else语句来分发请求到不同的服务,同时,每个服务也有很多if else语句来执行不同的操作。
我不知道if else是否是一个明智的选择,即使代码容易理解。对于这样的应用程序,正则表达式是否更快?
感谢您的参与 :)

正则表达式匹配和if/else语句似乎是两码事。也许你在if/else语句中使用了不同的“match”方法,最好进行比较? - Jody
3
请您自行进行基准测试,这很简单(而且比听别人的意见更准确)。 - foxy
一般来说不会。只需测量即可。 - i_am_jorf
2个回答

5
通常,通用编程框架(包括使用正则表达式)会导致代码运行速度变慢,但编写速度更快。使用正则表达式库可以节省大量编写代码的时间,而不会显著影响 CPU 时间。更常见的瓶颈是带宽、磁盘 IO 和数据库的 CPU 使用(如果在同一台机器上)。如果这很重要,我可以明确地说,通过避免使用正则表达式库,您可以获得更快的代码,但是您应该对实现进行基准测试,即使只是为了能够改进它。我没有测试过 C++ 中的正则表达式库的效率,但在样本程序中测试例程将很容易。

4

如果你的if/else只是检查字符串的前缀,那么它会更快。如果它是一些更复杂的东西,需要多次遍历字符串,那么你应该自己测量性能。

伟大的工程源于以可预测的成本创造可预测的结果。实际上,我喜欢说,如果你不进行测量,你就不是在工程。

Rico Mariani


嗨,我想检查姓名的前两个字符... 如果有大量的姓名,哪种方法更快,if/else 还是正则表达式? - Kumar
@LalitKumar,如果/if else,但如果它是一个名字,你可能需要考虑是否需要Unicode感知比较。 - Don Reba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接