3

我花了一天的大部分时间学习正则表达式,试图解析我的程序生成的配置文件。目前,配置文件有点像INI文件,但稍后会扩展。它的结构是这样的

> ##~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 是一个字符串,其中包含加载的配置文件中的所有文本。它目前所做的是给我一个空白的第一个索引。第二个索引包含一个字符串,其中包含 LAST 部分下方的所有内容。

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

有什么好的方法来解决这个问题?我现在了解如何编写正则表达式就好了。但即使在查看了 boost 中正则表达式的文档之后,我仍然不太确定如何使用所说的正则表达式。

感谢您阅读我的问题。我真的很感谢你抽出时间来做这件事。任何帮助,将不胜感激。

4

1 回答 1

2

查看Boost -function的文档。split_regex提供的正则表达式用作分隔符来分割字符串。

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

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

于 2013-01-11T21:19:42.500 回答