我花了大部分时间学习正则表达式,试图解析程序生成的配置文件。目前,配置文件模糊地类似于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是一个字符串,其中包含已加载配置文件中的所有文本。它目前的作用是给我一个空白的第一个索引。第二个索引包含一个字符串,其中的所有内容都低于最后一部分。
我的最终目标是拥有一对矢量,一个持有部分列表的文本,另一个持有另一个矢量。第二个向量将保存一个类的实例,该类将保存键和值(或者可能只是另一对)。
有什么好办法可以解决这个问题?我现在理解如何编写正则表达式。但即使在查看boost中正则表达式的文档之后,我仍然不太确定如何使用所述正则表达式。
感谢您阅读我的问题。我非常感谢你花时间去做那件事。任何帮助将不胜感激。
答案 0 :(得分:2)
查看Boost split_regex
函数的documentation。提供的regexp用作拆分字符串的分隔符。
您的正则表达式与您想要的部分匹配,但如果您真的想使用split_regex
,它应匹配部分名称之间的所有。
最新版本的C ++(C ++ 11)提供了有关正则表达式的new features。 This particular function能够确定字符串是否与给定的正则表达式匹配并返回所有匹配项。看看最后一个链接页面上提供的示例。