C++ Boost正则表达式混乱
我花了一天的大部分时间学习正则表达式,试图解析程序生成的配置文件。目前,配置文件与INI文件有点相似,但稍后将对其进行扩展。它的结构是这样的C++ Boost正则表达式混乱,c++,regex,boost,C++,Regex,Boost,我花了一天的大部分时间学习正则表达式,试图解析程序生成的配置文件。目前,配置文件与INI文件有点相似,但稍后将对其进行扩展。它的结构是这样的 > ##~SECTIONNAME~## > #KEY#value/# > #KEY#value/# > #KEY#value/# > ##~ANOTHERSECTION~## > #KEY#value/# > #KEY#value/# > #KEY#value/# 我要做的是将节名作为字符串返回。我的正则
> ##~SECTIONNAME~##
> #KEY#value/#
> #KEY#value/#
> #KEY#value/#
> ##~ANOTHERSECTION~##
> #KEY#value/#
> #KEY#value/#
> #KEY#value/#
我要做的是将节名作为字符串返回。我的正则表达式是#{2}(.*)~#{2},它在在线perel正则表达式测试仪上运行良好。但是当我通过C++运行时,我得到了奇怪的结果。
split_regex(sectionList,file,regex("#{2}~(.*)~#{2}"));
sectionList是一个临时数据持有者,它将保存一个节名列表。File是一个字符串,包含加载的配置文件中的所有文本。它现在做的是给我一个空白的第一个索引。第二个索引包含一个字符串,其中包含最后一节下面的所有内容
我的最终目标是得到一个成对的向量,一个保存节列表的文本,另一个保存另一个向量。第二个向量将包含一个类的实例,该类将包含键和值(或者可能只是另一对)
做这件事的好方法是什么?我现在很了解如何编写正则表达式。但是,即使看了boost中正则表达式的文档,我仍然不太确定如何使用这些正则表达式
谢谢你阅读我的问题。我真的很感谢你花时间这么做。任何帮助都将不胜感激。请查看Boostsplit\u regex
-函数的。提供的regexp用作分隔符来拆分字符串
您的regexp与您想要的部分匹配,但是如果您真的想使用split\u regex
它应该匹配节名之间的所有内容
最新版本的C++(C++ 11)提供了相关的正则表达式。能够确定字符串是否与给定的regexp匹配,并返回所有匹配项。请看最后一个链接页面上提供的示例。
…另请参阅boost的regex\u search
。使用来自boost的示例,您甚至可以迭代所有匹配项。谢谢。这个答案让我走上了正确的道路。谢谢你们两位的评论。我也会查看这些部分。同时,我有足够的时间来设置文件操作的基础知识。非常感谢:D