增强正则表达式混淆

Boost regex confusion

本文关键字:正则表达式 增强      更新时间:2023-10-16

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

> ##~SECTIONNAME~##
> #KEY#value/#
> #KEY#value/#
> #KEY#value/#
> ##~ANOTHERSECTION~##
> #KEY#value/#
> #KEY#value/#
> #KEY#value/#

我要做的是把section名作为字符串拿回来。我的正则表达式是#{2}~(.*)~#{2},它在在线perel正则表达式测试器上运行良好。但是当我在c++中运行它时,我得到了奇怪的结果。

    split_regex(sectionList,file,regex("#{2}~(.*)~#{2}"));

sectionList是一个临时数据持有者,它将保存一个section名称列表。File是一个字符串,包含加载的配置文件中的所有文本。它现在做的是给我一个空白的第一个索引。第二个索引保存一个字符串,包含LAST节以下的所有内容。

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

有什么好的方法去做这件事?我现在明白怎么写正则表达式了。但是,即使在查看了boost中的正则表达式文档之后,我仍然不太确定如何使用这些正则表达式。

谢谢你阅读我的问题。我真的很感谢你花时间来做这件事。

查看Boost split_regex -函数的文档。提供的regexp用作分隔符来分隔字符串。

你的regexp匹配你想要的部分,但是如果你真的想使用split_regex,它应该匹配你的section名之间的所有

最新版本的c++ (c++ 11)提供了关于正则表达式的新特性。这个特殊的函数能够确定字符串是否与给定的regexp匹配,并返回所有匹配。请查看最后一个链接页面提供的示例。