我正在用C++11编写一个简单的配置文件解析器,希望使用正则表达式从文本文件中挑选出key=value对。我希望能够支持此文件中的注释,由#符号表示。到目前为止,我有以下几点:
^(\w+)\s*=\s*([^#]+)这将匹配从行首开始的字母数字参数名,允许在=字符周围留出可选的空格,然后捕获注释符号之前的所有内容。这似乎非常有效,除了在下面的示例中:
param_1 =带注释的测试# comment
第二个捕获组捕获参数值末尾和#符号之间的空格。有没有什么办法可以让它忽略第二个捕获组中的任何尾随空格?
发布于 2017-01-22 17:58:47
此正则表达式适用于您的示例:
^(\w+)\s*=\s*([^#\n]+?)\s*(?=#|$)它是您最初的正则表达式,修改后不会对第二个组产生贪婪,并且在找到#或行尾之前的空格之前进行匹配。
Here就是一个例子。
https://stackoverflow.com/questions/41789461
复制相似问题