2013-01-11 42 views
3

我花了大部分时间学习正则表达式,试图解析我的程序所做的配置文件。目前,配置文件隐约类似于INI文件,但稍后将进行扩展。它的结构是这样的Boost正则表达式混淆

> ##~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是一个临时数据保存器,它将保存段名的列表。文件是包含来自加载的配置文件的所有文本的字符串。目前做的是给我一个空白的第一个索引。第二个索引包含一个字符串,其中包含LAST部分之下的所有内容

我的最终目标是拥有一个对的向量,一个持有部分列表的文本,另一个持有另一个向量。第二个向量将保存将保存键和值的类的实例(或者可能只是另一对)。

这是怎么回事?我明白如何正确编写正则表达式。但即使查看了正则表达式的boost文档,我仍然不确定如何去使用正则表达式。

感谢您阅读我的问题。我真的很感激你花时间这样做。任何帮助,将不胜感激。

回答

2

看看documentation为升压split_regex功能。提供的正则表达式用作分隔符来分割字符串。

您的正则表达式匹配您想要的部分,但如果您真的想使用split_regex,它应该匹配您的部分名称的所有之间的所有

最新版本的C++(C++ 11)提供了关于正则表达式的new featuresThis particular function能够确定一个字符串是否与给定的正则表达式匹配并返回所有匹配。查看最后一个链接页面上提供的示例。

+0

...另请参阅boost的'regex_search'。 –

+0

通过Boost的[regex_iterator](http://www.boost.org/doc/libs/1_52_0/libs/regex/doc/html/boost_regex/ref/regex_iterator.html),您甚至可以遍历所有匹配项。 – Sander

+0

谢谢。这个答案让我走上了正确的轨道。并感谢两位评论。我也会检查这些部分。 同时,我有足够的设置我的文件操作的基础知识。非常感谢:D – Legacyblade