【问题标题】:Boost regex confusion促进正则表达式混淆
【发布时间】:2012-12-26 12:49:30
【问题描述】:

我大部分时间都在学习正则表达式,试图解析我的程序生成的配置文件。目前,配置文件有点像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 中正则表达式的文档之后,我仍然不太清楚如何使用所说的正则表达式。

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

【问题讨论】:

    标签: c++ regex boost


    【解决方案1】:

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

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

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

    【讨论】:

    • ...另见 boost 的 regex_search
    • 使用来自 Boost 的 regex_iterator,您甚至可以遍历所有匹配项。
    • 谢谢。这个答案让我走上了正确的轨道。感谢你们两位也发表了评论。我也会查看这些部分。同时,我有足够的能力来设置我的文件操作的基础知识。非常感谢:D
    猜你喜欢
    • 2023-03-08
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    相关资源
    最近更新 更多