C ++ - 用于拆分HTTP标头的正则表达式?

时间:2014-01-27 23:13:36

标签: c++ regex boost split token

我有以下问题:

我必须拆分已经在字符串中序列化的HTTP标头。目前的格式如下:

  

Content-type:xml \ nContent-Length:12 \ nlast-modified:date \ n ..etc etc

我需要将标题的键和值存储到std :: map中。

(map["Content-type"] = "xml"; map["Content-Length"] = "12" ...)

有关如何做到这一点的任何建议? 是否可以使用boost:正则表达式?

1 个答案:

答案 0 :(得分:3)

没有必要为此使用正则表达式,尤其是不提升(我仍然认为这是一个可怕的,可怕的依赖,因为它的大小本身)。由于分隔符是固定的并且总是相同的字符(换行符和冒号),因此不需要使用任何正则表达式引擎。

相反,使用strtok()或其中一个相关函数(例如宽字符版本;请记住,此函数有其自身的缺点和问题,具体取决于实际用法,例如它可能不是线程安全的)

第一步,您可以使用它将标题拆分为单行。收到空行后,您就会知道标题已结束。

然后,要阅读标题行,您需要将其拆分为:,这样既可以获得密钥也可以获取值。

作为替代方案,您也可以使用std::string和成员函数find_first_of()来查找正确的位置。战略的其余部分将是相同的。